Из Hibernate версии 5.3.0 возвращает «порядковый параметр не привязан к 1» - PullRequest
0 голосов
/ 28 мая 2020

Я обновляю 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;
}

create or replace procedure getStudentDetails(p_return_cur OUT SYS_REFCURSOR) - это процедура Store с только выходным параметром.

Не указан параметр в коде java. До Hibernate 5.2. * Этой проблемы нет. При обновлении до 5.3. * Возвращается «порядковый параметр, не привязанный к 1».

1 Ответ

0 голосов
/ 28 мая 2020

Позиционные параметры не поддерживаются, начиная с версии 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...