在(…)查询中编写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);