簡體   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