2011-04-29 61 views
3

我有一个类A和类B之间的一对多关系,由数据库中两个表之间的外键关系表示。并且我希望通过hibernate快速加载B的集合,以便它可以在会话之外遍历。HIbernate和渴望加载集合

因此,我在一对多和多对一的映射条目上都指定了lazy="false"

B.hbm

<many-to-one cascade="all" fetch="join" lazy="false" 
    class="A" name="..."> 
    <column name="adgroup_id"/> 
    </many-to-one> 

A.hbm

<list cascade="all" inverse="true" name="..." lazy="false" fetch="join"> 
     <key column="adgroup_id" /> 
     <one-to-many class="B" /> 
</list> 

我注意到,Hibernate执行的SQL确实返回行的预期数量,但是当我打电话

A.getBs(),我太很多元素。实际上,因为我的数据库中的id是自动分配的,所以它似乎返回n + 1个元素,其中n是B s表中当前最高的id。

这是怎么回事?

我使用了Spring Hibernate的模板顺便说一句,叫template.get(class,id)返回N + 1个问题的A

回答

-4

很好的说明:What is SELECT N+1?

+6

对不起,我没有看到你的答案如何是非常有用的。这里只执行一次选择,返回预期的行数。但是,Java中返回的集合中的条目数量太多了 – ThuneGrill 2011-04-29 12:28:06