假设我要编写以下HQL查询:
FROM Cat c WHERE c.id IN (1,2,3)
将其编写为参数化查询的正确方法是什么,例如
FROM Cat c WHERE c.id IN (?)
假设我要编写以下HQL查询:
FROM Cat c WHERE c.id IN (1,2,3)
将其编写为参数化查询的正确方法是什么,例如
FROM Cat c WHERE c.id IN (?)
Answers:
我不确定如何使用位置参数执行此操作,但是如果可以使用命名参数而不是位置参数,则可以将命名参数放在方括号内,并且可以使用Query接口中的setParameterList方法将值列表绑定到此参数。
...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("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);
IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))
会这样。我打电话setParameter
来代替setParameterList
。DOH!