第二部分 Entity介绍
2.1 第一个Entity Bean:HelloWorld
EJB3中的Entity Bean是如此的简单,就是一个普通的java bean加上一些精炼的元数据批注。
@Entity
@Table( name="helloTable" )
public class HelloEntityBean {
private int id;
private String foo;
/**
* The entity class must have a no-arg constructor.
*/
public HelloEntityBean() {
}
public HelloEntityBean(int id, String foo) {
this.id = id;
this.foo = foo;
}
@Id(generate=GeneratorType.NONE)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
public String toString(){
return "HelloEntityBean: id=" + id + ", foo=" + foo;
}
}
代码中元数据的说明:
@Entity :EJB3 Entity Bean的批注,表明当前的java bean作为一个Entity Bean来处理。
@Table( name="helloTable" ) :顾名思义,定义当前Entity对应数据库中的表。
@Id(generate=GeneratorType.NONE) :我们把HelloEntityBean的id属性定义为主键。主键产生策略为GeneratorType.NONE,意味这是一个业务主键。
就这么简单!
2.2 解说Entity
从EJB3.0开始,Entity Bean持久化规范与EJB的其他规范如Session Bean, Message Driven Bean和EJB3容器规范开始分离,单独作为一个持久化API。而在将来,该持久化API很可能会从EJB3.0规范中脱离出来成为一个独立的规范Java Persistence API。作为Java平台上的通用数据访问标准接口。 为了跟规范一致,我们将在开发手册中将Entity Bean称为Entity。
虽然EJB3 Entity可以是很简单的java bean,只要批注了@Entity或者在xml配置中作了说明,就被做一个可持久化的Entity处理。 但还是需要遵行一定的规则:
- Entity类必须要有一个无参数的public或者protected的Constructor。
- 如果在应用中需要将该Entity类分离出来在分布式环境中作为参数传递,该Entity Class需要实现java.io.Serialzable接口。
- Entity类不可以是final,也不可有final的方法。
- abstract类和Concrete实体类都可以作为Entity类。
- Entity类中的属性变量不可以是public。Entity类的属性必须通过getter/setter或者其他的商业方法获得。
2.3 定义对Entity中属性变量的访问
在绝大部分的商业应用,开发人员都可以忽略这部分无需关心。但如果你需要编写复杂的Entity类的话,你需要了解这个部分。复杂的Entity类是指在Entity类的getter/setter和商业方法中包含比较复杂的业务逻辑而不是仅仅返回/符值某个属性。
在大部分的情况下,我们都建议使Entity类中setter/getter中的逻辑尽可能简单,除了必要的校验符值外,不要包含复杂的业务逻辑,例如对关联的其他Entity类进行操作。但有些情况下,我们还是需要在Entity类的setter/getter方法中包含商业逻辑。这时候,采用何种属性访问方式就可能会影响代码的性能甚至是逻辑正确产生影响。
EJB3持久化规范中,在默认情况下所有的属性都会自动的被持久化,除非属性变量用@Transient元数据进行了标注。针对可持久化属性定义了两种属性访问方式(access): FIELD和PROPERTY。
- 如果采用access=FIELD, EJB3 Persistence运行环境(EJB3持久化产品,如Liberator EJB3)直接访问对象的属性变量,而不是通过getter。这种访问方式也不要求每个属性必须有getter/setter。如果需要在getter中包含商业逻辑,应该采用access=FIELD的方式。
- 如果采用access=PROPERTY, EJB3 Persistence运行环境将通过Entity类上的getter来访问对象的属性变量,这就要求每个属性变量要有getter/setter方法。在EJB3中,默认的属性访问方式是PROPERTY。access=PROPERTY时getter/setter的逻辑应该尽量简单。
规范中access方式还有多一层含义。就是采用access=FIELD时,元数据应该批注在属性上。
@Id(generate=GeneratorType.NONE)
private int id;
private String foo;
/**
* The entity class must have a no-arg constructor.
*/
public HelloEntityBean() {
}
public int getId() {
return id;
}
采用access=PROPERTY(默认方式)时,元数据应该批注在对应属性变量的getter上。
private int id;
private String foo;
/**
* The entity class must have a no-arg constructor.
*/
public HelloEntityBean() {
}
@Id(generate=GeneratorType.NONE)
public int getId() {
return id;
}
为了方便开发,Liberator EJB3实现对元数据批注的位置比规范规定的宽松,针对属性变量或它的getter进行批注都可以,不受access类型的影响。
对Entity类中,getter/setter的命名规则遵从java bean规范。
Entity类中的属性变量可以是以下数据类型:
- 原始数据类型和他们的对象类型
- java.lang.String
- java.math.BigInteger
- java.math.BigDecimal
- java.util.Date
- java.util.Calendar
- java.sql.Date
- java.sql.Time
- java.sql.Timestamp
- byte[]
- Byte[]
- char[]
- Character[]
- enums
- Entity类
- 嵌入实体类(embeddable classes)
还可以是以下集合类型:
- java.util.Collection和它的实体类
- java.util.Set和它的实体类
- java.util.List和它的实体类
- java.util.Map和它的实体类
2.3 主键和实体标识(Primary Key and Entity Identity)
每个Entity类都必须有一个主键。在EJB3中定义了两种主键:
简单主键必须对应Entity中的一个属性变量(Instance Variable),而该属性对应数据库表中的一列。使用简单主键,我们只需要用@Id元数据对一个属性变量或者她的getter方法进行批注。
当我们需要使用一个或多个属性变量(表中的一列或多列)联合起来作为主键,我们需要使用复合主键。复合主键要求我们编写一个复合主键类( Composite Primary Key Class )。复合主键类需要符合以下一些要求:
- 复合主键类必须是public和具备一个没有参数的constructor
- 复合主键类的每个属性变量必须有getter/setter,如果没有,每个属性变量则必须是public或者protected
- 复合主键类必须实现java.io.serializable
- 复合主键类必须实现equals()和hashcode()方法
- 复合主键类中的主键属性变量的名字必须和对应的Entity中主键属性变量的名字相同
- 一旦主键值设定后,不要修改主键属性变量的值
一起看一个复合主键的例子。Entity类Person,它的主键属性变量是firstName和lastName。
@Id
private String firstName;
@Id
private String lastName;
public Person() {
}
Person的复合主键类:
public class PersonPK implements java.io.Serializable{
private String firstName;
private String lastName;
public PersonPK() {
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof PersonPK)) return false;
final PersonPK personPK = (PersonPK) o;
if (!firstName.equals(personPK.firstName)) return false;
if (!lastName.equals(personPK.lastName)) return false;
return true;
}
public int hashCode() {
int result;
result = firstName.hashCode();
result = 29 * result + lastName.hashCode();
return result;
}
}
分享到:
相关推荐
**企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上用于构建分布式...《EJB 3.0实例教程》这本书应该会详细解释这些概念,并通过实例帮助读者掌握EJB 3.0的实践应用。
**EJB3.0实例教程**是一份详细指导开发者如何使用Enterprise JavaBeans 3.0(EJB3.0)技术进行企业级应用开发的电子文档。EJB3.0是Java EE(Java Platform, Enterprise Edition)规范的一部分,旨在简化企业级组件的...
EJB 3.0是其重要的一个版本,它在EJB 2.x的基础上进行了大幅度的简化,提升了开发效率,降低了学习曲线,使得Java EE应用开发更加易用。 EJB 3.0的核心改进包括以下几个方面: 1. **注解驱动**:在EJB 2.x中,...
**EJB3.0实例教程及源代码** 本教程专注于企业级JavaBeans(EJB)3.0技术的实践应用,由黎活明提供。EJB是Java平台上的一个核心组件,用于构建可扩展的、可靠的、安全的分布式应用程序。EJB 3.0是EJB规范的一个重要...
在整个学习过程中,你将了解到EJB 3.0的核心概念,如依赖注入、容器管理的事务、安全性和性能优化。这些知识对于理解和构建企业级Java应用程序至关重要。同时,EJB 3.0的可读性强和简洁的编程模型也使其成为开发者...
在《中文最新EJB3.0实例教程》中,你将学习如何创建和部署EJB3.0组件,如何使用JPA进行数据持久化,以及如何利用依赖注入和事务管理构建可扩展和可靠的业务应用。教程中可能包含实际的项目案例,通过实践操作来加深...
**企业级JavaBeans(EJB)3.0入门教程** EJB(Enterprise JavaBeans)是Java平台企业版(Java EE)的核心组件之一,用于构建可扩展、安全且可靠的分布式企业应用。EJB 3.0是该技术的一个重大革新,引入了许多简化...
**企业级JavaBeans(EJB)3.0详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的组件模型。...学习这个教程,你将能够掌握EJB 3.0的核心概念,并有能力创建和部署自己的EJB组件。
EJB3.0实例教程 博文链接:https://brxonline.iteye.com/blog/153889
ejb3.0实例教程 ejb3.0实例教程 ejb3.0实例教程 ejb3.0实例教程 ejb3.0实例教程
第二部分重点关注EJB编程的具体内容和过程,向开发者展示了如何使用会话Bean、将会话Bean发布为Web服务、消息驱动Bean;第三部分专注于高级EJB专题;第四部分是附录,收集了EJB组件技术相关的其他内容。
第二部分重点关注EJB编程的具体内容和过程,向开发者展示了如何使用会话Bean、将会话Bean发布为Web服务、消息驱动Bean;第三部分专注于高级EJB专题;第四部分是附录,收集了EJB组件技术相关的其他内容。
EJB3.0入门图文教程电子书,Jbuilder 2007,新版JBuilder2007基于Eclipse平台,与以往的JBuilder版本完全不 同.借助于Eclipse的开放平台以及丰富的插件,使得JBulider对当前的流行的框架支持非 常好,同时支持EJB3.0的...
本实例教程将专注于EJB 3.0中的多对多映射,这是关系数据库与对象模型之间关系映射的一种常见模式。 多对多映射在现实世界中很常见,例如在学生和老师的关系中,一个学生可以有多个老师,同时一个老师也可以教多个...
传智播客_EJB3.0视频教程网盘下载,本教程仅供学习之用,请勿用于商用,一切后果自负。
**EJB3.0入门教程** 企业级JavaBean(Enterprise JavaBeans,EJB)是Java平台上用于构建可扩展、安全且事务处理能力强大的企业级应用的框架。EJB3.0是EJB技术的一个重大革新,它极大地简化了开发过程,降低了对...
【EJB学习大全】是针对企业级Java应用开发的一个重要主题,主要涵盖了EJB3.0、JPA教程以及实战EJB的相关知识。EJB,全称为Enterprise JavaBeans,是Java平台上的一个核心组件,主要用于构建分布式、面向服务的企业级...