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