快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
它。也就是说,如果关 系是双向的,则可以使用外键映射。这样,有两个选项可以从 Hibernate 映射一对多单向关系:

使用连接表映射并将连接表添加到数据库,或

使用外键映射并将关系从单向转换为双向,将反向属性添加到对象模型,并更改代码,以便将关系设 置为两个方向。

建议将单向关系转换为双向关系,因为与改变现有数据库模式和关联的行相比,此方法通常更容易修 改遗留代码。

在 OpenJPA 中,一对多(双向)关系按照以下方式进行映射:

在父对象中,使用一对多元素定义子对象的集合,并使用 id 元素为父对象定义主键。

在子类中,使用多对一元素定义父对象,并使用嵌套连接列元素定义子对象中的外键,并指定如何连 接父对象和子对象。

映射 15 一对多关系(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">      <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和EJB 3.0(二)(3)

时间:2011-09-18 Donald Vines

在定义一对多关系时,通常使用一些其他功能,您需要知道如何迁移这些功能:

Hibernate

inverse="true"

在 Hibernate 中,您可能会遇到在定义双向关系时使用的 inverse="true" 属性。如果是这样,请不 要担心,因为此功能等效于 OpenJPA 指定的关系的非所有者(它的表没有外键)。类似地,Hibernate inverse="false" 属性等效于 OpenJPA 的关系的所有者(它的表有外键)。

通常,这些概念是一致的,但使用 inverse="true" 设置在双向关系的多对一端定义 Hibernate 映射 这一情况除外。如果发现此类映射,则应在执行迁移之前更改它,因为它在 Hibernate 中不是最佳实践 ,并且不能生成最佳的 SQL。例如,如果将多对一端设置为 inverse="true",则每次创建子对象时, Hibernate 将执行两个 SQL 语句,一个创建子对象,一个使用父对象的外键更新子对象。在多对一端将 其更改为 inverse="false" 并在一对多端设置 inverse="true" 可以解决这一问题,并使它与 OpenJPA 保持一致。当然,进行该更改后,您应重新测试应用程序。

cascade="all-delete-orphan"

JPA 规范中没有与此 Hibernate 功能等效的功能,但是 OpenJPA 持久性提供程序中的专有 @ElementDependent 注释完全可以执行 Hibernate 的 all-delete-orphan 功能执行的任务。如果需要使 用该功能,请参阅 OpenJPA 用户指南。尽管它是专有功能,但是,如果使用它迁移 all-delete-orphan 特性,则不需要对应用程序源代码进行任何更改。

若要以符合标准的方式迁移 all-delete-orphan 功能,您可以使用 OneToMany 注释中的 cascade=C

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号