繁体   English   中英

从 Hibernate 版本 5.3.0 返回“序数参数未绑定 1”

[英]From Hibernate Version 5.3.0 return “ordinal parameter not bound 1”

我正在将 Hibernate 从 5.1.2.Final 升级到 5.4.13。 我在下面的代码中面临问题,

@Entity
@NamedNativeQuery(name = "getStudentDetails", resultClass = StudentEntity.class, query = "{call getStudentDetails(?)}")
public class StudentEntity {
private Long id;
private String name;
}

和我的 DAO class 如下所示,

public List<StudentEntity> getStudentDetails(){
 List<StudentEntity> result = null;
 try{
   Query query = em.createNamedQuery("getStudentDetails");
   result = query.getResultList();
}catch(Exception e){

}
return result;
}

create or replace procedure getStudentDetails(p_return_cur OUT SYS_REFCURSOR)是只有 output 参数的存储过程。

我没有在 java 代码中设置参数。 直到 Hibernate 5.2.* 没有这个问题。 更新到 5.3.* 时,它返回“序数参数未绑定 1”。

自 5.3 起不支持位置参数

已删除对 HQL/JPQL 查询中的旧式查询参数 ('?') 声明的支持。 此功能自 Hibernate 4.1 起已弃用,最终在 5.3 版本中删除。

因此,以下查询声明无效:

Query<Product> query = OBDal.getInstance().getSession()
    .createQuery("from Product as p where p.name = ? and p.stocked = ?", Product.class);
query.setParameter(0, "Ale Beer");
query.setParameter(1, true);

为了使前面的查询正常工作,它必须使用命名参数:

Query<Product> query = OBDal.getInstance().getSession()
    .createQuery("from Product as p where p.name = :name and p.stocked = :isStocked", Product.class);
query.setParameter("name", "Ale Beer");
query.setParameter("isStocked", true);

代码示例取自http://wiki.openbravo.com/wiki/Hibernate_5.3_Migration_Guide

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM