Hibernate原始集合包含值

时间:2014-01-02 21:29:40

标签: java sql hibernate

给出像这样的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个。

大多数在线搜索都显示了这个包含对象的例子,但我无法弄清楚如何为原始集合做这件事。

2 个答案:

答案 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,实体将在结果集中。