Правильный способ написания HQL в (...) запросе - PullRequest
74 голосов
/ 07 июня 2009

Предполагая, что я хочу написать следующий HQL-запрос:

FROM Cat c WHERE c.id IN (1,2,3)

как правильно написать это как параметризованный запрос, например:

FROM Cat c WHERE c.id IN (?)

Ответы [ 3 ]

126 голосов
/ 07 июня 2009

Я не уверен, как это сделать с позиционным параметром, но если вы можете использовать именованные параметры вместо позиционного, то именованный параметр можно поместить в скобки и setParameterList метод из Запрос Интерфейс может быть использован для привязки списка значений к этому параметру.

...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
10 голосов
/ 05 августа 2011

В старых версиях Hibernate метод setParameterList может отсутствовать на Query. Вы все еще можете вызвать setParameter("ids", listOfIds); на старшем для того же эффекта.

0 голосов
/ 24 февраля 2017

Именованные параметры лучше, чем позиционные параметры, мы должны быть осторожны при взгляде на порядок / позицию, в то время как именованные легко.

Названный:

Query query = session.createQuery("select count(*) from User"+" where userName=:userName and passWord=:passWord");
        query.setString("userName", userName);
        query.setString("passWord", passWord);

Позиционная:

Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = ? and  e.empDepartment = ?");
query.setParameter(1, employeId);
query.setParameter(2, empDepartment);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...