我在映射文件中定义了一个多对一字段,其中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>
发布于 2011-12-23 20:41:41
延迟加载只是对ORM实现的一个提示。如果您将级联定义为"all",hibernate可能会“决定”急切地加载实体是最佳的。
通常,如果ORM急于加载延迟映射的ManyToOne对象,这不是问题。
https://stackoverflow.com/questions/8620180
复制