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

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

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

作为参数化查询的正确写法是什么,例如。

FROM Cat c WHERE c.id IN (?)
66032 次浏览

我不知道如何做到这一点与位置参数,但如果你可以使用命名参数而不是位置,那么命名参数可以放在括号内和 质疑接口的 参数列表方法可以用来绑定这个参数的值列表。

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

旧版本的 Hibernate 可能在 Query上没有 setParameterList方法。您仍然可以在旧版本上调用 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);