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


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

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

Как правильно писать это в виде параметризованного запроса, например

FROM Cat c WHERE c.id IN (?)
3 73

3 ответа:

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

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

более старые версии Hibernate могут не иметь setParameterList метод on Query. Вы все еще можете позвонить 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);