自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(148)
  • 收藏
  • 关注

原创 目录

第1章  JPA概述1.1  什么是数据持久化1.2  Java持久化技术1.2.1  序列化(Serialization)1.2.2  JDBC1.2.3  关系对象映射(ORM)1.2.4  对象数据库(ODB)1.2.5  Java数据对象(JDO)1.2.6  EJB 2.X1.3  JPA(Java Persistence API)概述1.3.1 

2008-04-18 15:07:00 3762 4

原创 7.5 本章小结

本章详细介绍了映射的高级应用,包括多表映射、嵌入映射以及实体的继承映射。其中实体继承映射是本章的重点,实体继承有三种策略。最后讲述了实体继承的高级部分、多态的内容。虽然在实际的项目中,本章的这些内容涉及的并不是很多,但在适合的场合也可以有选择的使用。 

2008-05-12 15:55:00 868 2

原创 7.7.4 继承的设计重构

进一步学习了继承的几种策略,下面对图所设计的类进行重构。重构完成后的类继承关系示意图如图所示。在进行重构是考虑这样几方面的问题:l         基类实体EmployeeEO继承自非实体类BaseEO。这样设计的好处是,可以将非持久化的一些属性和方法放到BaseEO中,这样在实体中则不必须将非持久的方法使用@Transient标注了。l         将Contract

2008-05-12 15:54:00 1367

原创 7.4.5 带继承关系的实体查询(多态)

在JPA中,实体多态(polymorphism)的使用与Java的多态相同。实体的多态是指,当查询父类的实体时,也包含其子类实体。下面以7.3.3.4小节中数据表中的数据为例,执行以下查询:                   /**查询所有的EmployeeEO实体*/                   String sql = "SELECT e FROM EmployeeE

2008-05-12 15:54:00 2326

原创 7.4.3 继承自非实体类

 实体除了可以继承自实体外,也可以继承自没有标注@Entity普通的Java类。非实体类中的属性将不被持久化,而继承它的子类中,属性也将不被持久化。例如有这样一个EmployeeEO实体类,继承自普通的Java类BaseEO,代码如下所示。BaseEO类(非实体)public class BaseEO implements Serializable {        

2008-05-12 15:53:00 1127 1

原创 7.4.2 继承自非映射实体类(Mapped Superclasses)

JPA规范定义了一种特殊的实体类,这种实体类在实体的多在继承时使用,该类可以不映射为指定的一个表,但该类仍可定义可持久化的属性,这些可以被它的子类继承。这类实体使用标记@MappedSuperclass注释标记。例如,将ContractEmployeeEO实体定义为非映射实体的代码,如下所示:@DiscriminatorValue("contract")@MappedSupercl

2008-05-12 15:51:00 1529 1

原创 7.4.1 继承自抽象(abstract)实体类

之前所讲述的实体都是标注在具体类(concrete)上,事实上,实体也可以标注在抽象类abstract上。例如,将7.3.3小节中使用的EmoloyeeEO实体改成抽象类,代码如下所示:@Entity@Table(name = "tb_employee")@Inheritance(strategy=InheritanceType. SINGLE_TABLE)@Discrim

2008-05-12 15:50:00 1851

原创 7.4 深入实体继承

类继承和多态是Java面向对象程序中重要的部分,在JPA规范中规定了对于持久化的实体也可以实现继承。

2008-05-12 15:49:00 940

原创 7.3.6 三种继承策略对比

下面这三种继承策略进行一下对比,如表所示。表  三种继承策略对比 继承策略 继承关系的实体保存在一个表(SINGLE_TABLE) 每

2008-05-12 15:48:00 971

原创 7.3.5.4 数据表中的数据

同样执行7.3.3.4中执行创建实体的代码后,数据库中的表中的数据如图所示。另外,还有个一个生成这些表主键的表中的数据,如图所示。采用每个实体类保存在一个表继承策略,虽然是最简单、最直观的,但因为不同类分别独立的保存在不同的表中,所以在进行实体查询时,要跨越多个表进行查询,效率不高。

2008-05-12 15:39:00 625

原创 7.3.5.3 映射子类实体

下面来看一下各个子类的实体映射配置,子类实体中的属性将自动映射到改子类所对应的表中。实体RegularEmployeeEO的代码如下所示。RegularEmployeeEO实体@Entity@Table(name = "tb_regular_employee")public class RegularEmployeeEO extends EmployeeEO { 

2008-05-12 15:34:00 671

原创 7.3.5.2 映射顶层实体类

在基类使用TABLE_PER_CLASS映射时,只需要指定所映射的表和映射策略,而不需要设置@DiscriminatorColumn 和@DiscriminatorValue,以下为EmployeeEO的代码:@Entity@Table(name = "tb_employee")@Inheritance(strategy = InheritanceType.TABLE_PER_CL

2008-05-12 15:30:00 723

原创 7.3.5.1 表结构

同样是图7.3中类继承关系,采用每个实体保存为一个表的策略时,也需要创建5个表。创建表的SQL脚本如下所示。/*员工表*/CREATE TABLE  tb_employee (  id int(20) NOT NULL auto_increment,  name varchar(255) ,  PRIMARY KEY  (id));/*正式员工表*/CREATE

2008-05-12 15:25:00 706

原创 7.3.5 每个实体类保存在一个表(TABLE_PER_CLASS)

继承结构上的每个实体类,分别对应一个表。这些表中的字段与实体类所包含的属性一一映射。事实上,与一个实体映射一个表是相同的。

2008-05-12 15:23:00 788

原创 7.3.4.4 数据表中的数据

这样映射实体后,同样执行7.3.3.4中执行创建实体的代码后,数据库中的表中的数据如图所示。采用每个实体类保存在一个表的继承策略,虽然避免了表中大量null值的数据,但每个实体是通过关联来获得的。当有多个子类时,进行大量的查询会耗时很大,所以采取此策略时需要注意这些问题。 

2008-05-12 15:21:00 700

原创 7.3.4.3 映射子类实体

映射子类时除了要映射子类所对应的表外,还要映射父类表与子类表所关键的主键。例如,映射的RegularEmployeeEO实体代码如下所示:RegularEmployeeEO实体@Entity@Table(name = "tb_regular_employee")@DiscriminatorValue("regular")@PrimaryKeyJoinColumn(n

2008-05-12 15:19:00 740

原创 7.3.4.2 映射顶层实体类

在顶层的基类使用JOINED映射时,与使用SINGLE_TABLE的映射配置类似,不同的是标注的映射策略不同,以下为EmployeeEO的代码:EmployeeEO实体@Entity@Table(name = "tb_employee")@Inheritance(strategy=InheritanceType.JOINED)@DiscriminatorColumn

2008-05-12 15:18:00 713

原创 7.3.4.1 表结构

同样是图7.3中类继承关系,采用每个子类保存为一个表的策略时,需要创建5个表。创建表的SQL脚本如下所示:/*员工表*/CREATE TABLE  tb_employee (  id int(20) NOT NULL auto_increment,  name varchar(255) ,  employee_type varchar(32),  PRIMARY KEY

2008-05-12 15:17:00 739

原创 7.3.4每个实体子类保存在一个表(JOINED)

每个实体子类保存为一个表中,实际上是对SINGLE_TABLE的扩展,SINGLE_TABLE是把数据保存在一个表中,而JOINED是把一个表拆分,每个子类为一个表。所以采用此中继承策略时,每个实体都需要对应映射一个表。 

2008-05-12 15:16:00 733 1

原创 7.3.3.4 数据表中的数据

这样映射实体后,执行创建以下几个实体的代码:                   /** 创建EmployeeEO实体 */                   EmployeeEO employee = new EmployeeEO();                   employee.setName("Janet");                   entity

2008-05-12 15:14:00 755

原创 7.3.3.3 映射子类实体

下面来看一下各个子类的实体映射配置,实体RegularEmployeeEO的代码如下所示。RegularEmployeeEO实体@Entity@DiscriminatorValue("regular")public class RegularEmployeeEO extends EmployeeEO{          /**          * 属性id

2008-05-12 15:13:00 744

原创 7.3.3.2 映射顶层的实体类

首先看一下最顶层的父类EmployeeEO,代码如下所示。EmployeeEO @Entity@Table(name = "tb_employee")/**继承映射策略*/@Inheritance(strategy=InheritanceType.SINGLE_TABLE)/**标识字段定义*/@DiscriminatorColumn(name="emp

2008-05-12 15:12:00 1066 1

原创 7.3.3.1 表结构

存在这样一个表,表中包含了图7.3中类继承关系中所有的属性字段和一个标识类别的字段。表的SQL脚本如下所示。CREATE TABLE  tb_employee (  id int(20) NOT NULL auto_increment,/*员工编号*/  name varchar(255) ,/*员工名称*/  vacation_days int(10),/*年假天数*/ 

2008-05-12 15:11:00 624

原创 7.3.3 继承关系的实体保存在一个表(SINGLE_TABLE)

继承关系的所有实体都映射为一个表,这个表中的字段由以下两部分组成:l         类继承关系中,所有实体类的属性对应的字段。例如,RegularEmployeeEO实体和ContractEmployeeEO实体虽然处于同一个类层次上,但RegularEmployeeEO中包含vacationDays属性,ContractEmployeeEO包含createDate属性,所以表中要有两个

2008-05-12 15:10:00 665

原创 7.3.2 三种继承策略

JPA规范中规定了三种映射继承的关系策略,分别如下所示。l         继承关系的实体保存在一个表(Single Table per Class Hierarchy Strategy)继承关系的实体中,所有的实体类都映射到一个表中,表中使用一个特殊的标识字段(discriminator column),来标识一条记录属于那个子类。l         每个子类实体保存在一个表(J

2008-05-12 15:09:00 661

原创 7.3.1 类结构关系图

有这样五个实体类,它们分别是员工实体(EmployeeEO)、正式员工实体(RegularEmployeeEO)、签合同的员工实体(ContractEmployeeEO)、全职员工(FTEmployeeEO)和兼职员工(PTEmployeeEO)。它们的类继承关系如图所示。l         员工实体(EmployeeEO):所有实体类的父类,每个员工都有员工编号(id)和姓名(n

2008-05-12 15:08:00 771

原创 7.3 实体的继承策略

继承(Inheritance)是面向对象程序设计很重要的内容。JPA中规范了对实体也需要实现继承的机制。下面就讲述一下如何将带有继承关系的实体进行持久化映射。

2008-05-12 15:06:00 505

原创 7.2.4 映射属性@AttributeOverride

@AttributeOverrides由多个@AttributeOverride注释组成,每个@AttributeOverride表示属性的映射,它的定义如以下所示:@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)public @interface AttributeOverride {String name();Column

2008-05-12 15:04:00 1833

原创 7.3 实体的继承策略

继承(Inheritance)是面向对象程序设计很重要的内容。JPA中规范了对实体也需要实现继承的机制。下面就讲述一下如何将带有继承关系的实体进行持久化映射。

2008-05-12 15:04:00 631

原创 7.2.3 嵌入到实体

将Address类嵌入到实体类CustomerEO的代码如下所示: public class CustomerEO implements Serializable {          private Integer id;         private String name;         ……getter和setter方法省略         private

2008-05-12 15:02:00 531 1

原创 7.2.2 嵌入类

以上这两个表都含有地址信息zip和line1。现在可以将这两个表中相同信息保存在一个普通的Address类中,此时Addess类的代码如以下所示:@Embeddablepublic class Address implements Serializable {          /** 邮政编码 */         private String zip;     

2008-05-12 15:01:00 789

原创 7.2.1 嵌入映射表结构

例如,现在有两个表tb_customer客户表和tb_contact联系人表。两个表都含有客户和联系人的地址信息,这两个表的SQL语句如下所示。--客户表CREATE TABLE  tb_customer (  id int(20) NOT NULL auto_increment,  name varchar(255) ,  customer_zip varchar(6)

2008-05-12 14:55:00 756

原创 7.2 嵌入映射

嵌入式映射是将实体中的一些属性组装,映射成为另外一个非实体类。

2008-05-12 14:54:00 1054

原创 7.1.4 多个从表注释@ SecondaryTables

当从表有两个或以上时,要使用@ SecondaryTables注释标记多个从表。该比标记定义如下所示:@Target({TYPE}) @Retention(RUNTIME)public @interface SecondaryTables {SecondaryTable[] value();}@SecondaryTables可以标记两个或多个从表,每个从表定义使用@Seco

2008-05-12 14:51:00 914

原创 7.1.3 多个表映射为一个实体

现在增加一个员工照片表“tb_employee_photo”,保存员工的照片。该表也作为员工表的另外一个从表,而不映射为实体。在这种情况下,一个员工表,有两个从表合同表和员工照片表。员工照片表的表结构的SQL语句如以下所示:CREATE TABLE  tb_employee_photo (  id int(20) NOT NULL auto_increment,  data b

2008-05-12 14:50:00 989

原创 7.1.2 从表注释@ SecondaryTable

@ SecondaryTable用于定义从表,它的定义如以下代码所示:@Target({TYPE}) @Retention(RUNTIME)public @interface SecondaryTable {String name();String catalog() default "";String schema() default "";PrimaryKeyJoi

2008-05-12 14:48:00 1313

原创 7.1.1 两个表映射为一个实体

下面有以下这样一个需求,有两个表员工表(tb_employee)和合同表(tb_contatct),两个表通过员工的id(employee_id)关联。现在只需要将两个表映射为一个实体类,员工实体类。员工实体类中的属性除了员工表中的字段外,员工实体的其他的属性为对应合同表中的字段。这时,要映射的员工表叫做主表,合同表叫做从表。员工实体与员工表、合同表的结构示意图如图所示。两个表

2008-05-12 14:46:00 1189

原创 7.1 多表映射

大多数情况下,通常一个表映射为一个实体。但也有特殊情况,有时需要将两个表,或者多个表映射为一个实体。 

2008-05-12 14:44:00 850

原创 第7章 实体映射的高级应用

本章将学习实体映射的高级部分,包括多表映射、嵌入映射和实体的继承映射等。通过本章的学习,读者将能够进一步掌握各种复杂的实体映射。 

2008-05-12 14:43:00 599

原创 6.9 本章小结

本章详细讲述了实体之间的关系映射,实体间的关系从数量上分主要有一对一、一对多、多对一和多对多四种,从方向上说又有单向和双向之分。掌握好这几种基本的关系映射是学习JPA中最重要的基础知识。最后通过一个完整的客户关系实体的例子,总结回顾一下各个实体间的关系如何映射。希望读者能够仔细掌握。

2008-05-12 14:42:00 596

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除