Hibernate参数值[568903]与预期类型不匹配[java.lang.Long] [英] Hibernate Parameter value [568903] did not match expected type [java.lang.Long]
问题描述
我使用Hibernate 4,并且在JSF页面中有一个过滤器来获取搜索结果。执行搜索期间,我收到以下异常:
java.lang.IllegalArgumentException:参数值[568903]与
不匹配预期类型[java.lang.Long]
at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:370)
at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:343 )
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:370)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:323)
以下是我的代码段,我该如何解决这个问题?
private Long projectNo;
public Long getProjectNo(){
return projectNo;
}
public void setProjectNo(Long projectNo){
this.projectNo = projectNo;
}
在DAO类中,我有以下元素:
String projectNo = filters.get(projectNo);
列表<谓词> criteria = new ArrayList< Predicate>();
if(projectNo!= null){
ParameterExpression< String> pexp = cb.parameter(String.class,projectNo);
谓词谓词= cb.equal(emp.get(Project_.projectNo),pexp);
criteria.add(谓词);
}
TypedQuery< Project> q = entityManager.createQuery(c);
TypedQuery< Long> countquery = entityManager.createQuery(countQ);
q.setParameter(projectNo,projectNo); //错误在这一行
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){
Long
。因此,因为ParameterExpression的类型是 Long
,所以参数值的类型也应该是Long: //因为这个持久属性很长:
private长projectNo;
//我们在这里使用Long
ParameterExpression< Long> pexp = cb.parameter(Long.class,projectNo);
...
//最后设置参数。再长一点,因为这是
类型的ParameterExpression类型:
query.setParameter(projectNo,Long.valueOf(projectNo));
I am using Hibernate 4 and I have a filter in JSF page to get search results. During execution of search I am getting the following exception
java.lang.IllegalArgumentException: Parameter value [568903] did not match expected type [java.lang.Long] at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:370) at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:343) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:370) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:323)
Below is my code snippet, how can I fix this issue?
private Long projectNo;
public Long getProjectNo() {
return projectNo;
}
public void setProjectNo(Long projectNo) {
this.projectNo = projectNo;
}
And in 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);
Edit 1
public void getProjects(ProjectQueryData data) {
and in ProjectQueryData
class, I have the following as constructor
public ProjectQueryData (int start, int end, String field,
QuerySortOrder order, Map<String, String> filters) {
Because type of persistent attribute projectNo is Long
, type argument when creating ParameterExpression should be Long
. And consequently, because type of the ParameterExpression is Long
, type of the parameter's value should be Long as well:
//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));
这篇关于Hibernate参数值[568903]与预期类型不匹配[java.lang.Long]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!