Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate原语集合包含值_Java_Sql_Hibernate - Fatal编程技术网

Java Hibernate原语集合包含值

Java Hibernate原语集合包含值,java,sql,hibernate,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"

给定如下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>
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个


大多数在线搜索都显示了包中包含对象时的示例,但我不知道如何对原始集合执行此操作。

您可以通过子查询执行此操作

session.createCriteria(TestData.class)  
        .createAlias("integers", "i")  
        .add(Restrictions.eq("i.value", 100))
        .list();

使用当前的Hibernate Criteria API作为子查询无法实现这一点

此错误报告涵盖了以下内容:


您可以通过bradleyfitz发布的已接受答案合理地进行查询,但您不能进行反向查询(即不在),因为如果集合具有[1,2],并且您执行
限制.ne(“i.value”,1)
,则集合中的2返回true,实体将位于结果集中。

如果添加
setResultTransformer,则此操作有效(Criteria.DISTINCT\u ROOT\u ENTITY)
由于这使用联接,因此会为每个实体返回多行。