在(...)查询中编写HQL的正确方法

时间:2009-06-07 12:36:54

标签: hibernate hql

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

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

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

FROM Cat c WHERE c.id IN (?)

3 个答案:

答案 0 :(得分:126)

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

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

答案 1 :(得分:10)

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

答案 2 :(得分:-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);