简体   繁体   中英

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

Am upgrading Hibernate from 5.1.2.Final to 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,

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.

am not set outparameter in java code. Till Hibernate 5.2.* don't have this issue. When update to 5.3.* it return "ordinal parameter not bound 1".

Positional Parameters are not Supported since 5.3

Support for legacy-style query parameter ('?') declarations in HQL/JPQL queries has been removed. This feature has been deprecated since Hibernate 4.1 and finally removed in 5.3 version.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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