Предполагая, что я хочу написать следующий HQL-запрос:
FROM Cat c WHERE c.id IN (1,2,3)
как правильно написать это как параметризованный запрос, например
FROM Cat c WHERE c.id IN (?)
Я не уверен, как это сделать с помощью позиционного параметра, но если вы можете использовать именованные параметры вместо позиционных, то именованный параметр можно поместить в скобки, а метод setParameterList из интерфейса Query можно использовать для привязки списка значений к этому параметру.
...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
В более старых версиях Hibernate этот setParameterList
метод может не быть включен Query
. Вы все еще можете обратиться setParameter("ids", listOfIds);
к старому для того же эффекта.
IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))
происходит. Я звонилsetParameter
вместоsetParameterList
. DOH!Именованные параметры лучше, чем позиционные, мы должны быть осторожны при просмотре порядка / позиции - в то время как именованные - это просто.
По имени:
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);
источник