3
我有很多-to-many关联等被定义:Hibernate:部分延迟初始化?
Parent.hbm.xml:
<set name="children" table="child_parent_map" lazy="true">
<cache usage="nonstrict-read-write" />
<key column="parent_id" />
<many-to-many class="Child">
<column name="child_id" not-null="true" index="child_parent_by_child"/>
</many-to-many>
</set>
Child.hbm.xml:
<set name="parents" table="child_parent_map" lazy="true">
<cache usage="nonstrict-read-write" />
<key column="child_id" />
<many-to-many column="parent_id" class="Parent" lazy="false"/>
</set>
我相当肯定我正在初步化Parent.children
步行集合。例如:
for(Child child : parent.getChildren()) {
Hibernate.initialize(child.getAnotherProperty());
}
父母有六个孩子。然而,在一个会话中,父母似乎只有五个,而在另一个会话中(2秒后,数据库或另一个会话中没有任何变化) - 全部六个。实际上,我在将这些实体从自定义克隆器中分离出来之后发现它。
我认为懒惰的集合要么被完全初始化(即所有的元素都是),要么不是。不知何故,只有部分藏品可以初始化?它可能是缓存问题吗?
编辑:此会话处理一个相当大的数据集(几千个实体)。这是否有可能是因为一些已经加载的实体从会话中被驱逐出来?
你给属性“default_batch_fetch_size”设置了一些值吗? – jpkrohling 2011-03-05 07:57:56
你可以发布父母和孩子的代码吗?我会先看看hashCode()和equals()。 – 2011-03-07 21:13:12
Michal是对的,你可能在hashCode()和/或equals()中引起了你的对象行为异常。 – 2011-03-08 11:06:58