Правильный способ написания HQL в запросе ( ... )
предполагая, что я хочу написать следующий запрос HQL:
FROM Cat c WHERE c.id IN (1,2,3)
Как правильно писать это в виде параметризованного запроса, например
FROM Cat c WHERE c.id IN (?)
3 ответа:
Я не уверен, как это сделать с позиционным параметром, но если вы можете использовать именованные параметры вместо позиционных, то именованный параметр может быть помещен в скобки и setParameterList метод запрос интерфейс можно использовать для привязки списка значений к этому параметру.
... Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)"); query.setParameterList("ids", listOfIds); ...
более старые версии Hibernate могут не иметь
setParameterList
метод onQuery
. Вы все еще можете позвонитьsetParameter("ids", listOfIds);
на старшем для того же эффекта.
именованные параметры лучше, чем позиционные параметры, мы должны быть осторожны, глядя на порядок/положение - в то время как имя легко.
название:
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);