我在hbm.xml文件中有以下实体
<class name="Base" table="base">
<id name="id"/>
<list name="ips" cascade="all-delete-orphan" lazy="false" fetch="join">
<cache usage="read-write" include="all" />
<key column="base_id" />
<list-index column="ip_order"/>
<element column="ip" type="string"/>
</list>
</class>
我有一个实体Base,在集合中有两个ips字符串。
当我做的时候:
session.createCriteria(base.class).list();
结果是两个Base对象 我做的时候:
session.createQuery(" from Base").list();
结果是一个实体Base。 有人可以告诉我为什么会遇到这种情况吗?
答案 0 :(得分:0)
根据您的映射,xml Base
是一个表,ips(IP)
是另一个表。
一个基地有两个列表(ips)表示Base
表在DB(base table)
中有一个条目。
IP
将DB (ip table)
中有两个条目。
Obvisully Base table只有一个条目。
选中此example
答案 1 :(得分:0)
我敢打赌,ips
表中有2条记录。
由于您已声明ips
已被提取,因此当您创建获取ips
的条件时,它也会加入获取Base.class
,从而导致“结果集”包含2记录。但是,这两个“记录”实际上是同一个例子。
解决方法很简单,搜索使用DISTINCT_ROOT_ENTITY结果转换器。