快速业务通道

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(二) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
禁用延迟(或启 用 eager)初始化,请按照以下方式进行映射:

在父对象中,将集合(设置、包或列表)与 lazy=false 属性一起使用。

在子对象中,将类与 lazy=false 属性一起使用以启用获取。

映射 20. 延迟初始化(Hibernate XML 映射)

<!-- Address (parent) class --> <class name="Address" table="T_ADDRESS">   ...   <id name="addressId" column="ADDR_TID"/>   <set     name="phones"             table="T_PHONE"      cascade="all-delete-orphan"     inverse="true"     lazy="false">      <key column="ADDR_TID"/>     <one-to-many class="Phone"/>   </set> </class> <!-- Phone (child) class --> <class name="Phone" table="T_PHONE" lazy="false">   ...   <many-to-one     name="address"    class="Address"    column="ADDR_TID">   </many-to- one> </class>

OpenJPA 约定

在 OpenJPA 中,一对多和多对一关系的延迟初始化也是缺省值。要禁用延迟初始化(和启用 eager 初始化),请按照以下方式进行映射:

在父实体的集合中使用 fetch=FetchType.EAGER 属性。

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(二)(7)

时间:2011-09-18 Donald Vines

映射 21. 延迟初始化(OpenJPA XML 映射)

<!-- Address (parent) class --> <entity class="Address">   <table name="T_ADDRESS"/>   <attributes>    <id name="addressId">      <column name="ADDR_TID"/>    </id>     <one-to-many name="phones" mapped-by="address" fetch="EAGER">      <cascade>       <cascade-all/>      </cascade>     </one-to-many>    ...   </attributes> </entity> <!-- Phone (child) class --> <entity class="Phone">   <table name="T_PHONE"/>   <attributes>    <many-to-one name="address">      <cascade>       <cascade-all/>      </cascade>      <join-column name="ADDR_TID"/>    </many-to- one>    ...   </attributes> </entity>

还值得一提的是,Hibernate 和 OpenJPA 在从分离对象访问延迟加载的集合上是不同的。在 Hibernate 中,如果程序员尝试访问分离对象上延迟加载的集合,则会引发异常;而 OpenJPA 将返回空 值,而不是异常。

此差异的原因是 JPA 规范没有指定如何处理在分离对象上访问延迟加载的集合。每个 JPA 供应商可 以决定如何处理此条件。它们会引发异常,或者将其保留为未初始化状态,甚至返回具有零个元素的集合 。

因此,如果遗留 Hibernate 应用程序正在使用异常检测对分离对象的延迟加载集合的访问,您可以使 用 OpenJPA 通过测试空集合执行相同的操作。不过,需要记住的是:JPA 规范没有说明是引发异常还是 返回空值,因此依赖于此行为不可移植,并且随时会更改,甚至可能在以后版本中中断您的应用程序。

此外,还要务必注意您是获取异常(在 Hibernate 中获取),还是不获

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号