java - Hibernate 参数值 [568903] 与预期类型不匹配 [java.lang.Long]

标签 java hibernate jpa jpa-2.0

我正在使用 Hibernate 4,我在 JSF 页面中有一个过滤器来获取搜索结果。在执行搜索期间,我收到以下异常

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)

下面是我的代码片段,我该如何解决这个问题?

private Long projectNo; 

public Long getProjectNo() {
    return projectNo;
}

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

在 DAO 类中我有以下内容

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) {

最佳答案

因为持久属性projectNo的类型是Long,创建ParameterExpression时的类型参数应该是Long。因此,因为 ParameterExpression 的类型是 Long,所以参数值的类型也应该是 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));

关于java - Hibernate 参数值 [568903] 与预期类型不匹配 [java.lang.Long],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15229810/

相关文章:

sql - 如何在 PostgreSQL 中使用 LOWER 创建 GIN 索引?

java - 在 JBoss 4.2 上使用 JPA 启用 Hibernate 二级缓存

java - 使用 Maven 时出现 "package does not exist"错误

java - 如何更改 Hibernate Tools 反向工程 DAO 类的名称?

java - hibernate 嵌套异常

java - JPA 实体是否应该匹配数据库约束和触发器?

java - 使用引用的 ManyToOne 实体实现 equals/hashCode

java - 如何解决无法在Java oop中找到或加载主类?

java - 游戏重置后 KeyListener 类变得无响应

java - UnsatisfiedLinkError:在 Telegram 项目中出现此错误