gpt4 book ai didi

java - 从 Hibernate 版本 5.3.0 返回 "ordinal parameter not bound 1"

转载 作者:行者123 更新时间:2023-12-01 16:30:11 25 4
gpt4 key购买 nike

正在将 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 类如下所示,

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

}
return result;
}

创建或替换过程 getStudentDetails(p_return_cur OUT SYS_REFCURSOR) 是仅具有输出参数的存储过程。

我没有在java代码中设置outparameter。直到 Hibernate 5.2.* 没有这个问题。当更新到 5.3.* 时,它返回“序数参数未绑定(bind) 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

关于java - 从 Hibernate 版本 5.3.0 返回 "ordinal parameter not bound 1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62060453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com