EJB 3.0 开发指南之实体Bean

热血搞笑0

热血搞笑0

2016-01-29 12:58

EJB 3.0 开发指南之实体Bean,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;

  }

  当我们使用这个注释为get方法注释时,如果使用JDK5.0的通用编程,返回集合Collection<目标实体类型,那么就不需要指定targetEntity的类型,否则返回类型声明为普通的Collection的话,就必须声明targetEntity的类型。

  CascadeType指定了当这个实体Bean新建或者Merge的时候,与之关联的实体需要怎样的处理:

  ·MERGE:当主实体Bean被merge的时候、关联的实体Bean也被merge

  ·CREATE:当主实体Bean被create的时候、关联的实体Bean也被create

  ·REMOVE:当主实体Bean被evict的时候、关联的实体Bean也被evict

  ·ALL:包括以上的情况

  FetchType指定从数据中读取的方式:LAZY还是EAGER。LAZY只有当第一次访问的时候,才从数据库中得到相关的实体bean,EAGER则很积极,同主实体Bean一同产生。

  @ManytoOne

  我们知道一对多的关联是双向的。在关联的实体Bean中必定声明了由ManyToOne注释的方法。

  @JoinColumn

  我们知道两个实体可以关联,但对应到Table中需要指定一个列作为外键。假如不指定name,那么认为主表中的列和附表中的主键有相同名称的作为外键。如果不指定referencedColumnName,则认为外键对应副表的主键。

  @JoinColumns

  用来指示符合主键,在后面的章节中介绍。

  这个例子主要有以下几个文件,这个例子主要实现了管理学生分数的功能。Student是一个实体Bean,管理学生的基本信息(姓名和各课分数),其中学生的分数又是一个实体Bean。TacherBean是一个无状态的会话Bean,用来调用实体Bean。和前面的例子一样,我们还是使用Client测试。

  ·Student.java:实体Bean。

  ·Score.jav
展开更多 50%)
分享

猜你喜欢

EJB 3.0 开发指南之实体Bean

Java JAVA基础
EJB 3.0 开发指南之实体Bean

EJB3.0开发指南之实体Bean的继承

编程语言 网络编程
EJB3.0开发指南之实体Bean的继承

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

EJB 3.0开发指南之消息驱动Bean

Java JAVA基础
EJB 3.0开发指南之消息驱动Bean

EJB3.0开发指南之有状态会话Bean

Java JAVA基础
EJB3.0开发指南之有状态会话Bean

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

EJB3.0之实体Bean的继承

Java JAVA基础
EJB3.0之实体Bean的继承

EJB3.0开发指南之无状态会话Bean

Java JAVA基础
EJB3.0开发指南之无状态会话Bean

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

php如果不等待exec执行的程序创建的子进程? - PHPchina

php如果不等待exec执行的程序创建的子进程? - PHPchina

Java多线程编程精要

Java多线程编程精要
下拉加载更多内容 ↓