2013-03-04 25 views
0

我在hbm.xml文件中不同的结果与查询API与HQL

<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串一个实体基地。
当我使:

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

结果是两个基本对象 当我使:

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

结果是一个实体基础。
有人可以告诉我为什么我有这种情况?

+0

在您的标准'session.createCriteria(base.class).list();'应该是'Base.class'(名字必须以大写字母'B'开头)。这是否只是你的问题的印刷错误? – Andremoniy 2013-03-04 08:42:20

+0

不,因为这只是拼写错误 – nir 2013-03-04 14:04:26

回答

0

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

一个基地有两个清单(ips)意味着Base表将在DB(base table)有一个条目。 IP将在DB (ip table)中有两个条目。

Obvisully Base table将只有一个条目。

入住这example

0

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

如您有申报ips是渴望获取的,所以它也将加入获取ips当您创建的标准获取Base.class,导致“结果集”包含2个记录。但是,这两个“记录”实际上是同一个实例。

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