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

假设我想写下面的HQL查询:

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

什么是写这个参数化查询的正确方法,例如

 FROM Cat c WHERE c.id IN (?) 

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

 ... 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);