EJB 3.0开发指南之实体Bean

在EJB3.0中开发实体Bean非常简单,你可以象开发一般的java bean一样编程,只需做少量的注释。一个实体bean不需要实现Home接口或者Remote、Local接口。

实体Bean通过EntityManager产生、查找、和持久层结合、从持久层收回等操作。

JBoss的EJB3.0架构在Hibernate之上。

注释:

@Entity:如果你要建立一个实体Bean的类,你必须在类上加上这个注释,用来告诉容器这个类是实体Bean。这个Bean的主键由@Id指定。

这个注释的声明如下:

@Target(TYPE) @Retention(RUNTIME)
public @interface Entity {
String name() default "";
EntityType entityType() default CMP;
AccessType access() default PROPERTY;
int version() default 3;
}

name用来指定实体Bean的名称,缺省和类名相同。

EntityType用来指定此bean是容器管理的持久实体Bean还是Bean管理的持久实体Bean。可以是CMP和BMP两种方式。

AccessType用来指定容器访问此EJB的持久化数据的方式。PROPERTY用来告诉容器使用get/set访问持久化的数据(就是无Transient注释的数据),FILED告诉容器直接访问字段,字段应该声明称protected类型。

为了提供给其他会话Bean等客户端使用,这个Bean应实现Serializable接口。

实体Bean必须由一个无参数的构造方法。

可持久化的属性包括:java的基本类型(int,long等)、String、BigInteger、BigDecimal、java.util.Date、Calendar、java.sql.Date、java.sql.Time、java.sql.Timestamp、byte[]、char[]、其他实体Bean类型、其他实体Bean的集合(Collection、Set,不支持List)。

@Table

用来指定此实体Bean使用的主表,有时候可能需要其他的表,参看后面的章节的介绍。UniqueConstraint注释用来添加约束条件。

@Id

用来指定此实体Bean的主键。它可以有多种生成方式:

·TABLE:容器指定用底层的数据表确保唯一。

·SEQUENCE:使用数据库的SEQUENCE列来保证唯一

·IDENTITY:使用数据库的INDENTIT列来保证唯一

·AUTO:由容器挑选一个合适的方式来保证唯一

·NONE:容器不负责主键的生成,由调用程序来完成。

@OnetoMany

两个实体Bean之间可能有一对多、多对一、一对一、多对多的关系,后面两个关系在后面的例子中介绍。

比如学生和各课分数之间就是一对多的关系。

在EJB3.0中,一对多的关联必须是双向的,也就是说,必定有各多对一的关联和它对应。

OnetoMany注释声明如下:

@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface OneToMany {
String targetEntity() default "";
CascadeType[] cascade() default {};
FetchType fetch() default LAZY;
}

时间: 2024-08-18 08:41:40

EJB 3.0开发指南之实体Bean的相关文章

EJB 3.0开发指南之实体Bean的继承

在EJB3.0中,实体Bean可以实现继承关系. 比如有个Person的实体bean,它有姓名和性别两个属性. 上帝和女娲造人的时候,造出两种人:Man和Woman.Man和Woman都是实体Bean,而且他们都继承Person. 单一表策略就是副实体和子实体的数据都存放在一张表中,同时指定一列用来区别这些实体. 如: @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = Discrim

EJB 3.0开发指南之使用实体Bean

在上面一个例子中,实体Bean的属性对应到数据表中的列,都是采用默认的设置.通过Column,你可以为属性指定数据表中的列名. Column的声明如下: @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface Column { String name() default ""; boolean primaryKey() default false; boolean unique() default fal

EJB 3.0开发指南之依赖值对象

在上面的章节我们提到,实体bean的属性可以是java基本对象.Date等,事实上,实体Bean的属性也可以是其他的java对象.这些Java对象不能直接从持久化上下文中读取,它依赖于主实体bean.不象关联实体Bean,在EJB3.0中不支持依赖值对象的集合. 依赖值对象不支持继承,这将在EJB3.1中在讨论. 依赖类需要使用◎DependentObject来注释: @Target({TYPE}) @Retention(RUNTIME) public @interface DependentO

EJB 3.0开发指南之多表映射

在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上.事实上,一个实体Bean可以映射到多张表上.在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表.在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表.性别表这两个表. 从表可以使用@SecondaryTable来注释: @Target({TYPE}) @Retention(RUNTIME) public @interface SecondaryTable { String n

EJB 3.0开发指南之组合主键

在前面的所有的实体Bean的例子中,我们所用的主键都是Id,而且都是由容器自动生成的. 如: @Id(generate = GeneratorType.AUTO) public int getId() { return id; } 事实上,主键可以是任意的java基本类型.或者是基本类型的包装类,如Integer.String类型.或者是带字段或属性的主键类.注意,如果这样使用主键,你需要将主键的注释中的生成规则改为NONE.就是由程序生成主键值. 主键类必须实现hashCode和equals方

EJB 3.0开发指南之多表映射_JSP编程

在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上.事实上,一个实体Bean可以映射到多张表上.在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表.在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表.性别表这两个表. 从表可以使用@SecondaryTable来注释: @Target({TYPE}) @Retention(RUNTIME) public @interface SecondaryTable { String n

EJB 3.0开发指南之多对多和一对一

在前面的例子中,我们演示了一对多和多对一的例子,在本章将演示多对多和一对一的关系. 学生和老师就是多对多的关系.一个学生有多个老师,一个老师教多个学生. 学生和档案就是一对一的关系(不知道国外的学生有没有档案?). 为了实现多对多的关系,数据库中需要关联表,用以在两个实体间建立关联.JBoss可以自动生成关联表,你也可以@AssociationTable来指定关联表的信息. 如: @ManyToMany(cascade = {CascadeType.CREATE, CascadeType.MER

EJB 3.0开发指南之无状态会话Bean

在所有的EJB3.0规范中定义的EJB,都不必实现Home接口. 一个会话Bean必须有一个业务接口,这个接口由会话Bean来实现,或者也可以由会话Bean来产生.这样,你可以只写一个文件,就可以生成业务逻辑实现类.远程接口.本地接口等. - @Remote @Local @Stateless public class CounterBean { -- } 在目前jboss的实现中,必须要有一个独立的业务接口. 这个接口不必实现EJBObject或者EJBLocalObject. 一个无状态会话

EJB 3.0开发指南之有状态会话Bean

和无状态会话Bean一样,一个有状态会话Bean必须有一个业务接口,这个接口由会话Bean来实现,或者也可以由会话Bean来产生.这样,你可以只写一个文件,就可以生成业务逻辑实现类.远程接口.本地接口等. 在目前jboss的实现中,必须要有一个独立的业务接口. 这个接口不必实现EJBObject或者EJBLocalObject. 一个有状态会话Bean 必须使用Statelfull注释,以表明它是一个有状态的会话Bean.EJB容器将根据这个注释来判定它的类型.或者实现javax.ejb.Ses