2011-04-29 84 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