给出像这样的hibernate映射:
<class name="TestData" table="test_data">
<id name="integer" column="id_column"/>
<bag name="integers" table="test_data_collection">
<key column="id_column"/>
<element column="value" type="integer"/>
</bag>
</class>
如何创建一个可以创建如下SQL的Criteria:
SELECT * FROM test_data WHERE 100 in (SELECT value FROM test_data_collection WHERE test_data_collection.id_column=test_data.id_column)
目标是获取所有在其“整数”列表中有100个的TestData对象。理想情况下,我也想做相反的事情:不的所有TestData对象在其“整数”列表中都有100个。
大多数在线搜索都显示了这个包含对象的例子,但我无法弄清楚如何为原始集合做这件事。
答案 0 :(得分:0)
您可以对子查询执行此操作。
session.createCriteria(TestData.class)
.createAlias("integers", "i")
.add(Restrictions.eq("i.value", 100))
.list();
答案 1 :(得分:0)
使用当前的Hibernate Criteria API无法将其作为子查询执行此操作。
此错误报告涵盖了它:https://hibernate.atlassian.net/browse/HHH-869
你可以用接受的答案bradleyfitz合理地查询这个方式,但你不能做反向(IE不在),因为如果一个集合有[1,2]而你做Restrictions.ne("i.value", 1)
那么那个2 collection返回true,实体将在结果集中。