Hibernate parameter value The parameter value [568903] does not match the expected type [java.lang.Long]

I am using Hibernate 4 and I have a filter on the JSF page to get the search results. While doing a search, I get the following exception

java.lang.IllegalArgumentException: parameter value [568903] does not match expected type [java.lang.Long] at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding (AbstractQueryImpl.javahaps70) at org.hibernate.ejb.AbstractQueryplpl AbstractQueryImpl.javahaps43) on org.hibernate.ejb.QueryImpl.setParameter (QueryImpl.java{70) on org.hibernate.ejb.QueryImpl.setParameter (QueryImpl.java:323)

Below is my code snippet, how can I fix this problem?

private Long projectNo; 

public Long getProjectNo() {
    return projectNo;
}

public void setProjectNo(Long projectNo) {
    this.projectNo = projectNo;
}

And in the DAO class, I have the following

String projectNo = filters.get("projectNo");
List<Predicate> criteria = new ArrayList<Predicate>();
    if (projectNo!= null) {
    ParameterExpression<String> pexp = cb.parameter(String.class, "projectNo");             
    Predicate predicate = cb.equal(emp.get(Project_.projectNo), pexp);
    criteria.add(predicate);
}
TypedQuery<Project> q = entityManager.createQuery(c);
TypedQuery<Long> countquery = entityManager.createQuery(countQ);
q.setParameter("projectNo", projectNo); // error in this line
countquery.setParameter("projectNo", projectNo);

1

public void getProjects(ProjectQueryData data) { 

ProjectQueryData,

public ProjectQueryData (int start, int end, String field,
            QuerySortOrder order, Map<String, String> filters) {
+5
3

projectNo Long, ParameterExpression Long. , , ParameterExpression Long, :

//because this persistent Attribute is Long:
private Long projectNo; 

//we use Long here as well
ParameterExpression<Long> pexp = cb.parameter(Long.class, "projectNo");
...
//and finally set parameter. Long again, because that is the type 
// type of ParameterExpression:
query.setParameter("projectNo", Long.valueOf(projectNo));
+10

DAO projectNo :

String projectNo = filters.get("projectNo");

projectNo Long.

DAO :

q.setParameter("projectNo", projectNo); // error in this line

. ( , projectNo):

q.setParameter("projectNo", Long.parseLong(projectNo));

, , ( ), , projectNo Long.parseLong. Apache Commons StringUtils.isNumeric.

+3

projectNohas a type longin the DAO, so change it to long.

Try the following:

q.setParameter("projectNo", new Long(projectNo));

I think you should change:

ParameterExpression<String> pexp = cb.parameter(Long.class, "projectNo"); 

to

ParameterExpression<String> pexp = cb.parameter(String.class, "projectNo"); 
+2
source

All Articles