[英]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.