分享
 
 
 

EJB3 Persistence API标准化持久性

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

持久性对于大多数企业应用程序都非常要害,因为它们需要访问关系数据库(例如Oracle Database 10g)。假如您正在使用java开发应用程序,您可能需要完成一些常规任务(例如数据库更新和检索),这是通过编写JDBC和SQL来完成的。最近几年,几种对象关系(O-R)映射框架(例如Oracle TopLink、JBoss Hibernate和BEA Kodo)开始流行,因为它们简化了持久性问题,将Java开发人员从编写JDBC代码的工作中解放出来,从而使他们能够将精力集中于业务逻辑。一些Java标准(例如EJB 2.x容器治理持久性(CMP)实体bean)也试图解决持久性挑战,但是不那么成功。

虽然存在多种构建应用程序持久层的选择,但是还没有一种面向Java平台的、在Java EE和Java SE环境下均可使用的持久性标准。好消息是EJB3 Java Persistence API (JPA)(它是EJB 3.0规范JSR-220的一部分)的出现,它标准化了面向Java平台的持久性API。JSR-220为O-R映射供给商(例如TopLink、Hibernate和Kodo)以及其他领先的应用服务器供给商和JDO供给商所广泛接受。EJB3规范提供了一种极有吸引力的选择,用于构建企业Java应用程序的持久层。

在本文中,我将介绍EJB3 Java Persistence API,我将使用一个简单的域对象模型作为示例。

域模型

在构建企业应用程序时,我们首先会设计希望将其保存在数据库中的域对象模型;然后,与数据库设计人员合作,确定数据库模式。域模型表示了持久性对象或实体。实体可以是人、地方或事物,您存储关于它们的数据。它包含数据和行为。富域模型具有所有面向对象的行为特征,例如继续性和多态性。

我们的简单域模型(图1)具有Department与Employee实体之间的双向一对多关系。FullTime和Contractor实体继续自Employee实体。

图1.示例域对象模型

O-R框架和EJB3 JPA基础知识

假如使用过O-R映射框架(例如Oracle TopLink)构建应用程序持久层,您就会注重到,每种框架都提供三种工具:

一种声明式地执行O-R映射的方式。这种方法(称为O-R映射元数据)答应将对象映射到一个或多个数据库表。通常,大多数O-R框架使用xml存储O-R映射元数据。

一个用于操作实体(例如,执行CRUD操作)的API。此API答应持久化、检索、更新或移除对象。基于API和O-R映射元数据的使用,O-R框架代表开发人员执行数据库操作。此API将开发人员从编写JDBC或SQL代码以持久化域对象的工作中解放出来。

一种用于检索对象的查询语言。这是持久性最重要的方面,因为非法的SQL语句可能会降低数据库的速度。此方法也对应用程序屏蔽了混乱地遍布应用程序的的专有SQL。查询语言答应检索实体或对象,并将开发人员从编写SQL SELECT语句的工作中解放出来。

EJB3 Java Persistence API (JPA)提供一种标准O-R映射机制、一个执行CRUD操作的EntityManager API以及一种扩展EJB-QL以检索实体的方式,从而标准化了面向Java平台的持久性的使用。我将在后面讨论这三个方面。

启用元数据注释

Java SE 5.0引入了元数据注释。Java EE的所有组件(包括EJB3 JPA)大量使用元数据注释以简化企业Java开发。要了解关于元数据注释的更多信息,请参阅Kyle Downey所著的Bridging the Gap: J2SE 5.0 Annotations。在EJB3 JPA中,注释可以用于定义对象、关系、O-R映射和持久性上下文的注入。JPA还提供使用XML描述符来代替的选择。我将主要介绍元数据注释的使用,因为它们大大简化了开发。不过,您可能更倾向于在生产部署环境中使用XML描述符,因为可以使用它们重写注释。

标准化JPA中的O-R映射

定义持久对象:实体

实体是轻量级的域对象——您希望将其保存在关系数据库中的Plain Old Java Object (POJO)。像任何POJO一样,实体可以是抽象或具体类,它能够扩展另一个POJO。可以使用javax.persistence.Entity注释将POJO标记为实体。

以下代码将使域模型中的Department对象成为实体:

package onjava;

import java.io.Serializable;

import java.util.Collection;

import javax.persistence.*;

@Entity

@NamedQuery(name="findAllDepartment", query="select o from Department o")

@Table(name="DEPT")

public class Department implements Serializable {

@Id

@Column(nullable=false)

PRotected Long deptNo;

@Column(name="DNAME")

protected String name;

@Column(name="LOC")

protected String location;

@OneToMany(mappedBy="department")

protected Collection employees;

public Department() {

}

...

public Collection getEmployees() {

return employees;

}

public void setEmployees(Collection employees) {

this.employees = employees;

}

public Employee addEmployee(Employee employee) {

getEmployees().add(employee);

employee.setDepartment(this);

return employee;

}

public Employee removeEmployee(Employee employee) {

getEmployees().remove(employee);

employee.setDepartment(null);

return employee;

}

}

每个实体都有一个主键;可以在持久字段或属性上使用Id注释将其标记为主键。实体通过使用字段或属性(通过setter和getter方法)来保存其状态。这取决于在哪里使用O-R映射注释。以上示例使用基于字段的访问;我们已经使用了具有deptNo字段的Id注释。要使用基于属性的访问,就要使用属性标记注释(例如Id),如下所示:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有