Подтвердить что ты не робот

Правильный способ написания запроса HQL в (...)

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

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

Каков правильный способ записи этого параметра в качестве параметризованного запроса, например

FROM Cat c WHERE c.id IN (?)
4b9b3361

Ответ 1

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

...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...

Ответ 2

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

Ответ 3

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

Названный:

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);