开发者

Hibernate: Partial lazy initialization?

开发者 https://www.devze.com 2023-02-15 09:46 出处:网络
I have a many-to-many association defined like: Parent.hbm.xml: <set name=\"children\" table=\"child_parent_map\" lazy=\"true\">

I have a many-to-many association defined like:

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>

I am quite sure I am initializing Parent.children by walking the collection. Something like:

for(Child child : parent.getChildren()) {
    Hibernate.initialize(child.getAnotherProperty());
}

Parent has six children. However, in one session parent appears to have only five, and in another (2 seconds later, nothing changed in DB or in another session) - all six. Actually, I discovered it after detaching these entities from session with a custom cloner.

I thought that lazy collections are either completely initialized (i.e. all elements are), or not. Is it possible that somehow only a part of the collection was initialized? Can it be an issue with caching?

EDIT: This session handles a fairly large data set (a few thousands of entities). Is it possible that this is because some already-loaded entities got evicted from the session?


Start by checking your hashCode() and equals() methods, incorrect implementation of these methods often cause this kind of behavior.

0

精彩评论

暂无评论...
验证码 换一张
取 消