我在类A
和类B
之间有一对多的关系,由数据库中两个表之间的外键关系表示。我希望hibernate急切地加载B
的集合,以便它可以在会话之外遍历。
所以我在一对多和多对一映射条目上指定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模板btw,调用template.get(class,id)
返回A