快速业务通道

使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
会类之间是否存在继承关系,为每一个类的持久化使 用唯一的表,父类对象保存在父类对应的表中,子类对象的信息保存在子类对应 的表中,这也是通常的持久化框架采用的方式。下面这个图显示了这种情况下对 象继承关系数据库中的表现。

以上一章节中提到的对象模型为例: Animal、Fish、Dog 三个类的对象实例 都被保存在各自对应的数据表中。下面这个图显示了这种情况下对象继承关系数 据库中的表现。

图 3. 第二种策略的数据库表现

使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承(3)

时间:2011-08-31 IBM 肖菁

3. 类和子类分别保存在不同的数据库表中,子类中不保存父类中已有的属性 ,仅通过主键进行关联

这种情况下,父类和子类对应不同的表,但是子类对应的表中不再保存父类对 应表中已经存在的字段信息,两个表之间通过关键字段关联起来,也就是数据库 技术中通常所说的外健。这种实现方式是最理想化的一种,既能够处理对象之间 的继承,又满足了关系数据库中对于设计范式的要求。

以上一章节中提到的对象模型为例: Animal、Fish、Dog 三个类的对象实例 都被在 Animal 表中有记录;而 Fish 对象的 TERRITORY 属性者被 FISH 表所保 存,FISH 表通过 ID 和 Animal 表中的数据进行关联;而 Dog 对象的 SEX 属性 者被 Dog 表所保存,Dog 表通过 ID 和 Animal 表中的数据进行关联。下面这个 图显示了这种情况下对象继承关系数据库中的表现。

图 4. 第三种策略的数据库表现

这三种方式的处理对于开发者而言是透明的,无论选择哪一种,仅仅影响数据 在关系数据库中的保存方式,对于开发者而言,只需要按照面向对象的方式操作 对象既可,OpenJPA 框架在处理持久化操作的时候,会动态地判断当前对象的实 际类类型(后期绑定),从而确定持久化到哪个表中。在一个企业应用的实现中 ,开发者可以根据需要选择这三种方式的一种或者几种来处理对象之间的继承关 系。

Inheritance 注释

OpenJPA 是一个基于注释的持久化框架,对持久化的大多数元信息都只需要为 实体类提供相应的注释。开发者使用注释描述实体和数据库表之间的映射,也采 用注释描述对象继承关系的持久化。javax.persistence.Inheritance 注释用来 指定对象继承关系持久化的方式。它的 strategy 属性用于指定持久化对象继承 关系在关系数据库中的表现形式,可选择项包括 SINGLE_TABLE、JOINED 和 TABLE_PER_CLASS。它们三个都是 javax.persistence.InheritanceType 中定义 的常量。

SINGLE_TABLE

strategy 设置为 SINGLE_TABLE 选项表示所有类及其子类保存在同一个数据 库表中,对象的类型使用表中的特殊字段 DTYPE 进行识别。

TABLE_PER_CLASS

strategy 设置为该选项表示每个类使用一个表。

使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承(4)

时间:2011-08-31 IBM 肖菁

JOINED

strategy 设置为该选项表示父类和子类分别保存在不同的数据库表中,子类 中不保存父类对应数据库表中已有的属性,仅通过主键进行关联。

javax.persistence.Inheritance 注释是类级别的注释。需要为每一个成为父 类的实体类提供 javax.persistence.Inheritance 注释并且指定 strategy 属性 。在同一个企业应用中,开发者可以根据实际情况选择这三种策略中的一种,或 者是几种同时使用。

对象继承关系的持久化和查询

上面的章节中,我们已经介绍了 OpenJPA 中处理对象继承的方法,下面我们 通过一些简短的代码来演示如何实现 Animal、Fish、Dog 及其继承关系的持久化 ,同时介绍如何将这种对象继承关系从数据库中还原出来。

演示中,我们选择使用实现第三种方式:JOINED。这也是 OpenJPA 中持久化 对象继承的最佳实践,既符合 Java 开发者面向对象的

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