Hibernate 3 Lazy加载多对一字段在将cascade设置为“all”时不起作用

时间:2011-12-23 20:05:27

标签: hibernate lazy-loading cascade many-to-one

我在映射文件中定义了多对一字段,其中lazy =“no-proxy”和cascade =“none”。 字节码仪器ant任务已完成。我得到了懒惰的工作正常。

但是当我将级联更改为“all”时,延迟加载不起作用。所有其他懒惰的属性也都急切地加载。

这里我的问题是为什么在设置cascade =“all”时懒惰加载不起作用? 当设置cascade =“all”时,是否有任何解决方案可以使多对一延迟加载工作?

当cascade =“none”时,在调用session.load(A.class,longid)之后,没有加载属性emailAdr,contact和testb,这就是我的例外情况。

但是当将级联更改为“all”时,所有惰性字段在调用session.load(A.class,longid)时都会急切地加载。

<hibernate-mapping>
    <class name="com.abc.TestA" lazy="false" table="TBL_TESTA">
        <id name="oid" type="java.lang.Long" unsaved-value="null" column="OID">
            <generator class="com.abc.IdentifierGenerator"/>
        </id>
        <version column="VER_NUM" name="verNum" type="long"/>

        <property name="emailAdr" type="java.lang.String" lazy="true" column="EMAIL_ADR" >

        <many-to-one name="contact" class="com.abc.SetupContact" lazy="no-proxy" cascade="none" not-null="true">
            <column name="CNTCT_OID"/>
        </many-to-one>

        <one-to-one name="testb" class="com.abc.TestB" lazy="no-proxy" cascade="none"/>
    </class>
</hibernate-mapping>

1 个答案:

答案 0 :(得分:0)

延迟加载只是ORM实现的一个提示。如果你将级联定义为“全部”,那么hibernate可能会“决定”它是最适合加载实体的最佳选择。

一般情况下,如果ORM急切地加载延迟映射的ManyToOne对象,则不会出现问题。