【发布时间】:2011-04-29 12:16:33
【问题描述】:
A 类和B 类之间存在一对多关系,由数据库中两个表之间的外键关系表示。我希望 hibernate 急切地加载 Bs 的集合,以便可以在会话之外遍历它。
所以我在一对多和多对一映射条目上都指定了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 是 Bs 表中当前最高的 id。
这里发生了什么?
顺便说一句,我正在使用 Spring hibernate 模板,调用 template.get(class,id) 以返回 A
【问题讨论】:
标签: hibernate hibernate-mapping