【发布时间】:2010-11-01 00:01:09
【问题描述】:
假设我要编写以下 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 (?)
【问题讨论】:
我不确定如何使用位置参数执行此操作,但如果您可以使用命名参数而不是位置参数,则可以将命名参数放在括号内,并且可以使用来自Query 接口的setParameterList 方法来绑定列表此参数的值。
...
Query query = session.createQuery("FROM Cat c WHERE c.id IN (:ids)");
query.setParameterList("ids", listOfIds);
...
【讨论】:
旧版本的 Hibernate 可能在 Query 上没有 setParameterList 方法。您仍然可以在旧版本上调用 setParameter("ids", listOfIds); 以获得相同的效果。
【讨论】:
IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))。我打电话给setParameter 而不是setParameterList。 DOH!
命名参数比位置参数好,我们应该小心查看顺序/位置 - 虽然命名很容易。
姓名:
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);
【讨论】: