我在映射文件中定义了多对一字段,其中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>
答案 0 :(得分:0)
延迟加载只是ORM实现的一个提示。如果你将级联定义为“全部”,那么hibernate可能会“决定”它是最适合加载实体的最佳选择。
一般情况下,如果ORM急切地加载延迟映射的ManyToOne对象,则不会出现问题。