简体   繁体   English

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

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

Am upgrading Hibernate from 5.1.2.Final to 5.4.13.我正在将 Hibernate 从 5.1.2.Final 升级到 5.4.13。 Am facing issue in below code,我在下面的代码中面临问题,

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

and my DAO class like below,和我的 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) is Store procedure with only output parameter. create or replace procedure getStudentDetails(p_return_cur OUT SYS_REFCURSOR)是只有 output 参数的存储过程。

am not set outparameter in java code.我没有在 java 代码中设置参数。 Till Hibernate 5.2.* don't have this issue.直到 Hibernate 5.2.* 没有这个问题。 When update to 5.3.* it return "ordinal parameter not bound 1".更新到 5.3.* 时,它返回“序数参数未绑定 1”。

Positional Parameters are not Supported since 5.3自 5.3 起不支持位置参数

Support for legacy-style query parameter ('?') declarations in HQL/JPQL queries has been removed.已删除对 HQL/JPQL 查询中的旧式查询参数 ('?') 声明的支持。 This feature has been deprecated since Hibernate 4.1 and finally removed in 5.3 version.此功能自 Hibernate 4.1 起已弃用,最终在 5.3 版本中删除。

Therefore, the following query declaration is not valid:因此,以下查询声明无效:

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

To make the previous query work fine it must use named parameters:为了使前面的查询正常工作,它必须使用命名参数:

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

Code sample is taken from http://wiki.openbravo.com/wiki/Hibernate_5.3_Migration_Guide代码示例取自http://wiki.openbravo.com/wiki/Hibernate_5.3_Migration_Guide

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

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