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

Rob*_*anu 75 hibernate hql

假设我想编写以下HQL查询:

FROM Cat c WHERE c.id IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)

将此作为参数化查询编写的正确方法是什么,例如

FROM Cat c WHERE c.id IN (?)
Run Code Online (Sandbox Code Playgroud)

Mat*_*tej 127

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

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


Tra*_*vis 10

旧版本的Hibernate可能没有这个setParameterList方法Query.您仍然可以调用setParameter("ids", listOfIds);旧版本以获得相同的效果.

  • 为什么这会被改变呢?花了一个小时搞清楚为什么`IllegalArgumentException在类中:org.ase.mip.persistence.entities.BaseEntityImpl,getter方法的属性:id(BasicPropertyAccessor.java:186))`正在发生.我叫`setParameter`而不是`setParameterList`.DOH! (5认同)