81

假设我想编写以下 HQL 查询:

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

将其编写为参数化查询的正确方法是什么,例如

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

3 回答 3

132

我不确定如何使用位置参数执行此操作,但如果您可以使用命名参数而不是位置参数,则可以将命名参数放在括号内,并且可以使用Query接口中的setParameterList方法将值列表绑定到此参数。

...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
于 2009-06-07T13:13:02.787 回答
12

旧版本的 Hibernate 可能没有setParameterListon 方法Query。您仍然可以调用setParameter("ids", listOfIds);旧的以获得相同的效果。

于 2011-08-05T11:18:12.037 回答
-4

命名参数比位置参数好,我们应该小心查看顺序/位置 - 虽然命名很容易。

命名:

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);
于 2017-02-24T12:05:49.967 回答