Hibernate:部分延迟初始化?

时间:2011-03-04 22:27:21

标签: java 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秒后,在DB或另一个会话中没有任何变化) - 所有六个。实际上,我在使用自定义克隆程序从会话中分离这些实体后发现了它。

我认为懒惰的集合要么完全初始化(即所有元素都是),要么不是。有可能只是某个集合的一部分被初始化了吗?这可能是缓存的问题吗?

编辑:此会话处理相当大的数据集(数千个实体)。是否有可能是因为一些已经加载的实体被逐出会议?

1 个答案:

答案 0 :(得分:1)

首先检查 hashCode() equals()方法,这些方法的错误实现经常会导致这种行为。