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

c. 一对多关系

一对多关系定义到对象集合的引用。由于用例通常需要从父对象到子对象的遍历,而可能需要(也可 能不需要)从子对象到父对象的遍历,所以一对多关系是对象模型中最常见的关系类型;这意味着单向一 对多关系可以满足大多数情况。

也就是说,如果用例需要从子对象到父对象的遍历,则可以在子类中方便地添加多对一关系,使之成 为双向关系。

声明一对多关系的实体是父对象(并且是非所有者)。此实体的表定义主键,但是它没有外键(外键 在子对象中)。

此一对多关系引用的对象是子对象和关系的所有者。子对象具有外键,并引用父对象的主键。

在 Hibernate 中,一对多关系的映射通常是通过将列添加到外键的子表完成的,但映射的详细内容是 不同的,具体取决于是单向一对多关系,还是双向一对多关系。

在单向关系中,子表中的外键列不会映射到子对象中的属性,它在数据模型中,而不是在对象模型中 。由于是单向的,所以仅在父对象中有属性,而子对象中没有。此外,必须将外键列定义为可以为空,因 为 Hibernate 将首先插入子行(使用 NULL 外键),并在以后更新它。

在双向关系中,对象关系映射比较好,因为子对象中有一个用于外键列的属性,在数据库中该列不必 为空。但是,结果对象模型在对象之间有循环依赖关系和更紧密的耦合关系,并需要其他编程来设置关系 的两端。

可以看出,关于一对多关系的定义,有多个要考虑的权衡因素,但是通常建议使用单向关系,除非用 例指示需要用两个方向导航。

对象模型

映射 13. 一对多关系 (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 {
  ...
}

Hibernate 约定

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

在父类中,将设置、包或列表与一对多子元素一起使用。

如果关系是单向的,则在表示子类的表中创建外键;否则,使用双向关系的多对一关系。

时间: 2024-10-01 15:37:59

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(二)的相关文章

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

简介:通过使用 EJB 2.1 以及 OpenJPA 和 EJB 3.0 中的等效功能比较 Hibernate 应用程序中的特 性和功能,学习如何将 Hibernate 应用程序源代码.对象关系映射和配置参数迁移到 OpenJPA. 引言 Hibernate 是开放源代码持久性和查询框架,提供传统 Java 对象 (POJO) 到关 系数据库表的与对象相关的映射,以及数据查询和检索功能.Apache OpenJPA 项目将按照 EJB 3.0 Java Persistence API 规范的定义

使用Apache OpenJPA开发EJB 3.0应用,第8部分

在Java EE环境下开发.部署OpenJPA 应用 在 本系列 文章的第 1 部分:OpenJPA 与 EJB 3.0中介绍 OpenJPA 时,曾经 提到"OpenJPA 可以作为独立的持久层框架发挥作用,也可以轻松的与其它 Java EE 应用框架或者符合 EJB3.0 标准的容器集成",在本系列的前面几篇文章中都 只是讲解了如何将 OpenJPA 作为独立的持久层框架发挥作用,在本文中,我们将 会了解如何在 JBoss 应用服务器中使用 OpenJPA 开发实体 Bean.并且

使用Apache OpenJPA开发EJB 3.0应用,第2部分:开发第一个Open JPA应用

在上一部分中,我们了解了 EJB 3.0 标准和 OpenJPA 的基本特性,现在我们 将开始讲述如何使用 OpenJPA 开发企业应用.本文中,我们将假设有一个 Animal 对象,在某一个应用场景中,我们需要使用 OpenJPA 框架提供的工具和 接口完成 Animal 对象的持久化.属性修改.删除.查找功能.本文将通过简单 的文字和代码描述使用 OpenJPA 开发的步骤和方法,以及开发过程中如何使用 OpenJPA 提供的工具协助完成开发任务. 下载及安装 OpenJPA 支持环境准备

使用Apache OpenJPA开发EJB 3.0应用,第7部分

使用Eclipse Dali开发OpenJPA应用 关于 Eclipse Dali JPA 工具 Dali JPA Tools 是由 Eclipse.org 推出.支持 JPA 项目开发的插件,主要 目标是为用户开发.编辑 EJB 3.0 中 JPA 实体的映射关系提供可视化工具支持 .Dali 是 Eclipse WTP(Web Tools Platform)工具集中的一部分,这是由 Eclipse.org 提供.支持 Web 应用和 Java EE 应用开发的工具集. 目前 Dali 的最新

使用Apache OpenJPA开发EJB 3.0应用,第1部分: OpenJPA与EJB 3.0

简介: Java Persistence API(JPA)是 EJB 3.0 新引入的数据持久化编程模型,它 利用 Java 5 中的注释(Annotation)和对象/关系映射,为数据持久化提供了更 简单.易用的编程方式. 本系列 文章将全面介绍其开源实现 - Apache OpenJPA,将为学习 JPA 标准和使用 OpenJPA 进行实际的应用开发提供详细的指 南. 本文是系列文章的第一部分,概述了关系型数据库和面向对象之间的阻抗失谐 (impedance mismatch),介绍了 E

使用Apache OpenJPA开发EJB 3.0应用,第6部分:处理实体生命周期事件的回调

企业应用开发过程中,经常会存在这样的需求:当企业应用中的某些数据被增 加.删除.修改时,引发一些特定的动作,完成企业应用中的一些特别的要求, 比如企业应用中要完成数据操作日志.处理数据之间的某种关系.或者是完成一 些局部的统计工作等.通常情况下,开发者有两种选择: 开发者提供独立 的代码来处理这种需求: 使用关系型数据库中的"触发器"技 术 , 让开发者指定在特定表中添加.删除.修改数据时引发特定的动作,完成数 据库中数据的处理. 然而这两种方式都有一定的局限性,在第 1 种方式 中,

使用Apache OpenJPA开发EJB 3.0应用,第5部分: 实体标识的自动生成

数据的唯一性是所有应用程序非常基本的要求,由开发者或者用户来维护这种 唯一性存在着较大的风险,因此,由系统自动产生唯一标识是一种常见的做法. OpenJPA 中支持四种不同的实体标识自动生成策略: 容器自动生成的实体 标识: 使用数据库的自动增长字段生成实体标识: 根据数据库序 列号(Sequence)技术生成实体标识: 使用数据库表的字段生成实体标识 : 这四种方式各有优缺点,开发者可以根据实际情况进行选择. 可选择的注释 要让容器和数据库结合管理实体标识的自动生成,根据实际 情况的不同,开发

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

对象和对象之间除了继承关系之外,还存在着关联关系:包括一对一.一对多 .多对一和多对多关系,在 OpenJPA 框架下,开发者只需要使用 javax.persistence.OneToOne 这样的注释,并提供相应的配置内容,就可以轻松 的实现实体之间的关联关系,并且能够实现实体的级联创建.更新和删除. 本文中我们将以实体之间的一对一关联关系为例,深入地讲述如何使用 OpenJPA 框架提供的注释,实现企业应用中实体之间的关联关系.文中将提供一 个简单的例子,详细的说明如何定义类和类之间的一对一

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

面向对象和关系型数据库 Java 语言天生就是一门面向对象的编程语言,在 Java 世界中,被处理的内 容都被组织成一个一个的对象,对象和对象之间存在着继承.引用关系,这样的 关系无法通过简单的方式直接映射到关系型数据库中.因此在关系型数据库与面 向对象之间存在着阻抗失谐. 我们通过一个简单的例子来说明这种阻抗失谐给企业应用开发者带来的困难. 假设在企业应用中存在三个 Java 类:Animal.Fish 和 Dog.Animal 仅仅具备 两个属性:id 和 name.Fish 是一种 Ani