Hibernate参数值[568903]与预期类型不匹配[java.lang.Long] [英] Hibernate Parameter value [568903] did not match expected type [java.lang.Long]

查看:1241
本文介绍了Hibernate参数值[568903]与预期类型不匹配[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 。因此,因为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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆