快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
" table="T_USER_GROUP">     <key column="USER_TID"/>     <many-to-many column="GROUP_TID" class="Group"/>    </set> </class>

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

时间:2011-09-18 Donald Vines

OpenJPA 约定

在 OpenJPA 中,多对多关系按照以下方式进行映射:

在所有者/子对象中,使用多对多元素和嵌套连接表元素指定如何创建关系。您还将 id 与嵌套列元素 一起使用,以指定连接表引用的主键名称。

在非所有者/父对象中,将多对多元素与 mapped-by 属性一起使用,以引用声明连接表的类中的属性 。(连接表包含创建关系的所有信息。您还需要通过 id 元素创建主键。)

映射 18. 多对多关系(OpenJPA XML 映射)

<!-- User (owner/child) class --> <entity class="User">   <table name="T_USER"/>   <attributes>    <id name="userId">      <column name="USER_TID"/>    </id>    <many-to-many name="groups">      <join-table name="T_USER_GROUP">        <join-column name="USER_TID"/>       <inverse-join-column name="GROUP_TID"/>      </join-table>    </many-to-many>     ...   </attributes> </entity> <!-- Group (non-owner/parent) class --> <entity class="Group">   <table name="T_GROUP"/>   <attributes>    <id name="groupId">      <column name="GROUP_TID"/>    </id>    <many-to-many name="users" mapped- by="groups"/>    ...   </attributes> </entity>

3. 延迟初始化

可以将延迟初始化应用到任何字段,但是它经常与一对多或多对多关系一起使用,在读取父对象时, 您还可以控制是否需要数据库返回所有子对象。

为进一步阐述此概念,请考虑使用从 A 到 B 的一对多或多对多关系。如果在该关系中将 fetch 设置 为 LAZY,则从数据库读取 A 将不能从该数据库读取 B,直到代码尝试遍历从 A 到 B 的关系。另一方面 ,如果将 fetch 设置为 EAGER,则从数据库读取 A 也可以从该数据库读取依赖的 B 对象。

在使用 LAZY 或 EAGER 的 fetch 定义关系时,请务必小心,尤其是在按照一般模式,EJB 层将分离 实体返回到 Web 层并且 Web 层访问该数据以呈现视图时更要小心。使用 LAZY 加载,Web 层可以没有呈 现视图必需的依赖对象。另一方面,您不能使用 EAGER 直接加载所有关系,因为每次返回的信息比必要 信息多。

原因在于您必须使用满足业务需求的适当获取策略定制域模型。如果用例需要父对象和子对象,则使 用 EAGER 加载。如果用例不需要子对象,则使用 LAZY 加载。

对象模型

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

时间:2011-09-18 Donald Vines

映射 19. 延迟初始化 (POJO)

// Address (parent) entity public class Address implements Serializable {    private Long addressId;   private Set phones = new HashSet();   ... } // Phone (child) entity public class Phone implements Serializable {   private Address address;   ... }

Hibernate 约定

在 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号