0

我在 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>

我在集合中有一个带有两个 ips 字符串的实体 Base。
当我做:

session.createCriteria(base.class).list();

当我制作时,结果是两个 Base 对象:

session.createQuery(" from Base").list();

结果是一个实体 Base。
有人能告诉我为什么我会遇到这种情况吗?

4

2 回答 2

0

我敢打赌,表中有 2 条记录ips

由于您已声明ips急切获取,因此它也会ips在您创建 fetch 条件时加入 fetch Base.class,导致“结果集”包含 2 条记录。然而,这两个“记录”实际上是同一个实例。

解决的方法很简单,搜索使用 DISTINCT_ROOT_ENTITY 结果转换器。

于 2013-03-04T10:11:33.863 回答
0

根据您的映射 xmlBase是一个表,ips(IP)是另一个表。

一个 Base 有两个 List(ips)意味着Basetable 将有一个条目DB(base table)IP将有两个条目DB (ip table)

Obvisully 基表将只有一个条目。

检查这个例子

于 2013-03-04T08:42:47.850 回答