快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
) ,则您仍应能够基于本部分中的信息得出更改,并将应用程序迁移到 OpenJPA。另一方面,如果希望将 Java 5 注释与 OpenJPA 一起使用,附录提供了这样的示例。

还可以使用其他方法在 Java 对象和关系表之间进行映射。本部分将介绍在企业应用程序中出现的通 用场景,其中包括:

继承

关系

延迟初始化

对象标识

乐观锁定

1. 继承

企业应用程序的数据模型通常有多个位置,类之间的一般化/专业化在这里提供重要的重用机会。 Hibernate 和 OpenJPA 都支持可以在关系表中建模继承的三种不同方法。我们将讨论其中的两项,我们 认为这两项是最常见的场景:

单个表继承

连接继承

第三项(每个具体的类一个表)由 Hibernate 提供,但通常很少用,它是 JPA 持久性提供程序(如 OpenJPA)的可选实现。

a. 单个表继承

对于 Java 基础类包含其所有子类的大多数属性的情况,可以使用单个表映射继承,该表中的一列值 标识特定的子类,行所表示的实例属于此类。如果没有任何列映射到特定的子类,则这些列必须声明为可 以为空,因为它们在该子类的数据库行中将为空。

此继承策略的缺点是如果子类为该实例定义多个非空属性,则非空约束的丢失会带来数据完整性问题 。此方法的主要优点是,它为类层次范围的实体和查询之间的多态关系提供最佳支持,因为不存在复杂的 连接。

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

时间:2011-09-18 Donald Vines

对象模型

映射 1. 单个表继承 (POJO)

// Participant (base) class public class Participant implements Serializable {   private Long participantId;   ... } // SalesRep (sub) class public class SalesRep extends Participant { ... } // Administrator (sub) class public class Administrator extends Participant { ... }

Hibernate 约定

在 Hibernate 中,单个表继承按照以下方式进行映射:

在基础类中,将类与映射到表的辨别器列一起使用;还要为主键和其他属性定义映射(稍后进行介绍 ,不在示例中显示)。

将子类与子类中独特的辨别器值一起使用;还要为子类独有的属性定义映射。您不能在子类中定义 ID 元素;它们没有自已的表,因此使用(基础)类的 ID。

映射 2. 单个表继承(Hibernate XML 映射)

<!-- Participant (base) class --> <class name="Participant" table="T_PRTCPNT" > <id name="participantId" column="PRTCPNT_TID"/> <discriminator column="PRTCPNT_TYPE" type="string"/> ... </class> <!-- SalesRep subclass --> <subclass name="SalesRep" extends="Participant" discriminator-value="SALES_REP"> ... </subclass> <!-- Administrator subclass --> <subclass name="Administrator" extends="Participant" discriminator-value="ADMIN"> ... </subclass>

OpenJPA 约定

在 OpenJPA 中,单个表继承按照以下方式进行映射:

在基础类中使用 SINGLE_TABLE 继承策略和辨别器列;还要定义基础类的持久属性及其唯一的 ID。

使用子类中的辨别器值表示其实例;还要定义子类的持久属性,而不是 ID。子类不会有任何表;它们 的属性将提升到表示基础类的表。

映射 3. 单个表继承(OpenJPA XML 映射)

<entity class="Participant"> <table name="T_PRTCPNT"/> <inheritance strategy="SINGLE_TABLE"/> <discriminator-column name="PRTCPNT_CLASS"/> <attribute

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