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


Answers:


129

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

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

11

较旧的Hibernate版本可能未setParameterList启用Query。您仍然可以调用setParameter("ids", listOfIds);较旧的设备,以达到相同的效果。


5
为什么仍然要更改它?只是花了一个小时才弄清楚为什么IllegalArgumentException in class: org.ase.mip.persistence.entities.BaseEntityImpl, getter method of property: id (BasicPropertyAccessor.java:186))会这样。我打电话setParameter来代替setParameterList。DOH!
opncow

-4

命名参数比位置参数要好,我们应该仔细查看顺序/位置-命名很容易。

命名:

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

3
完全同意,但这不能回答我有关IN(...)查询的问题
Robert Munteanu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.