Предполагая, что я хочу написать следующий запрос HQL:
FROM Cat c WHERE c.id IN (1,2,3)
Каков правильный способ записи этого параметра в качестве параметризованного запроса, например
FROM Cat c WHERE c.id IN (?)
Ответ 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);