查询api与hql的结果不同

时间:2013-03-04 08:31:43

标签: java hibernate

我在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。 有人可以告诉我为什么会遇到这种情况吗?

2 个答案:

答案 0 :(得分:0)

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

一个基地有两个列表(ips)表示Base表在DB(base table)中有一个条目。 IPDB (ip table)中有两个条目。

Obvisully Base table只有一个条目。

选中此example

答案 1 :(得分:0)

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

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

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