快速业务通道

使用Apache OpenJPA开发EJB 3.0应用,第4部分: 实体关联 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

使用Apache OpenJPA开发EJB 3.0应用,第4部分: 实体关联

时间:2011-08-31 IBM 肖菁

对象和对象之间除了继承关系之外,还存在着关联关系:包括一对一、一对多 、多对一和多对多关系,在 OpenJPA 框架下,开发者只需要使用 javax.persistence.OneToOne 这样的注释,并提供相应的配置内容,就可以轻松 的实现实体之间的关联关系,并且能够实现实体的级联创建、更新和删除。

本文中我们将以实体之间的一对一关联关系为例,深入地讲述如何使用 OpenJPA 框架提供的注释,实现企业应用中实体之间的关联关系。文中将提供一 个简单的例子,详细的说明如何定义类和类之间的一对一关联关系的步骤,同时 会重点讲述这些注释所支持的属性。一对多、多对一和多对多这三种关联关系在 OpenJPA 中的实现过程和一对一关联关系的实现过程是一致的,只是需要选择使 用不同的注释,在本文的最后,会对实现这三种关联关系进行简单说明,读者可 以参考一对一关系的实现过程来实现一对多、多对一和多对多的关联关系。

一对一关系

在面向对象的世界里,类 A 和类 B 之间形成一对一关系必须满足如下条件:

对象 A1 引用了对象 B1;

类 A 的其它对象 An 不能引用同样的对象 B1。

在关系数据库中,我们通常使用唯一外键的方式来实现一对一关系,下面这个 图说明了这种的情况。

图 1. 关系数据库中的一对一关系

下面开始介绍 OpenJPA 中实现实体之间一对一关联关系的相关知识,为了说 明的需要,我们首先定义一个简单的应用场景。

模拟场景

假定开发者要完成一个图书馆管理系统,我们需要记录书的基本信息如编号、 书名、出版日期等基本信息,还需要记录书的前言,序等信息。

为了说明实体之间的一对一关系,我们将书设计成一个类(Book),包括书的 编号和名称两个属性,同时将书的前言设计成另外一个类(BookExtend),它包 括书的编号和前言两个属性。由于一本书有前言而且也不可能有其它书的前言部 分会和它一样,所以类 Book 和 BookExtend 之间很自然的形成了一对一的关系 。这两个类的属性以及类之间的关系如下图所示。

图 2. 类之间的一对一关系

[注]:为了说明的简单,本例子设计时每个对象只选择了必要的属性。

使用Apache OpenJPA开发EJB 3.0应用,第4部分: 实体关联(2)

时间:2011-08-31 IBM 肖菁

描述一对一关系

在 OpenJPA 中,开发者用来描述实体之间一对一关系时可选择的注释包括 javax.persistence.OneToOne 和 javax.persistence.JoinColumn。其中 javax.persistence.OneToOne 注释是必须使用的,它被用来声明类和类之间存在 着一对一关系,javax.persistence.JoinColumn 注释是可选的,开发者使用 JoinColumn 注释来声明两个类在数据库中对应的表之间关联时的细节,包括主表 中关联字段的名称、从表中使用什么字段来进行关联等。

javax.persistence.OneToOne

javax.persistence.OneToOne 注释支持如下 5 个属性,它们可以被开发者用 来定义实体和实体之间一对一关联关系的细节内容。

target Entity

targetEntity 属性是 Class 类型的属性。定义实体一对一关系中处于从属地 位的实体类的类型。如果没有为该属性设置值,OpenJPA 容器默认 targetEntity 属性的值是该成员属性对应的类类型,所以实体关系定义时通常不需要为 targetEntity 属性设置值。

mappedBy

mappedBy 属性是 String 类型的属性。mappedBy 属性的值是当前实体在关联 实体中的属性名称,使用 mappedBy 可以定义实体类之间的双向关系。如果类之 间是单向关系,不需要提供定义,如果类和类之间形成双向关系,我们就需要使 用这个属性进行定义,否则可能引起数据一致性的问题。

以演示场景中 Book 和 BookExtend 实体为例,假设我们只定义 Book 类

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