EJB3.0之实体Bean的继承

2016-01-29 13:00 7 1 收藏

EJB3.0之实体Bean的继承,EJB3.0之实体Bean的继承

【 tulaoshi.com - Java 】

  在EJB3.0中,实体Bean可以实现继承关系。 比如有个Person的实体bean,它有姓名和性别两个属性。

  上帝和女娲造人的时候,造出两种人:Man和Woman。Man和Woman都是实体Bean,而且他们都继承Person。

  单一表策略就是副实体和子实体的数据都存放在一张表中,同时指定一列用来区别这些实体。

  如:

  @Entity
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING)
  @DiscriminatorColumn(name = "P_TYPE", nullable = true)
  @ Inheritance的注释声明如下:
  @ @Target({TYPE}) @Retention(RUNTIME)

  public @interface Inheritance {
  InheritanceType strategy() default SINGLE_TABLE;
  DiscriminatorType discriminatorType() default STRING;
  String discriminatorValue() default "";
  }

  这个注释用来指定继承使用的策略,以及为了区别这些实体所用的列的类型与值。

  @DiscriminatorColumn注释用在单一表策略和联合表策略上。用来指定区别各实体所需的列。
  @Target({TYPE}) @Retention(RUNTIME)

  public @interface DiscriminatorColumn {
  String name() default "";
  boolean nullable() default false;
  String columnDefinition() default "";
  int length() default 10;
  }

  这个例子主要有以下几个文件,这个例子主要实现了Person和Man、Woman之间的继承关系,下面两章介绍的例子和这个例子相同。Man和Woman继承Person实体Bean。前面的例子一样,我们还是使用Client测试。

  Person.java:实体Bean。

  Man.java:实体Bean所依赖的类。

  Woman.java:实体Bean所依赖的类。

  PersonTest.java:会话Bean的业务接口

  PersonTestBean.java:会话Bean的实现类

  Client.java:测试EJB的客户端类。

  jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。

  Build.xml:ant 配置文件,用以编译、发布、测试、清除EJB。

  下面针对每个文件的内容做一个介绍。

  Person.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.ejb.DiscriminatorColumn;
  import javax.ejb.DiscriminatorType;
  import javax.ejb.Entity;
  import javax.ejb.GeneratorType;
  import javax.ejb.Id;
  import javax.ejb.Inheritance;
  import javax.ejb.InheritanceType;

  @Entity
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING)
  @DiscriminatorColumn(name = "P_TYPE", nullable = true)
  public class Person implements java.io.Serializable
  {
  private int id;
  private String name;
  private String gender;

  @Id(generate = GeneratorType.AUTO)

  public int getId()
  {
  return id;
  }

  public void setId(int id)
  {
  this.id = id;
  }

  public String getName()
  {
  return name;
  }

  public void setName(String name)
  {
  this.name = name;
  }

  public void setGender(String gender)
  {
  this.gender = gender;
  }

  public String getGender()
  {
  return gender;
  }

  }

  指定使用P_TYPE列用来区别各实体Bean。

  Man.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.ejb.DiscriminatorType;
  import javax.ejb.Entity;
  import javax.ejb.Inheritance;
  import javax.ejb.InheritanceType;

  @Entity
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE, discriminatorType = DiscriminatorType.STRING, discriminatorValue = "Man")

  public class Man extends Person
  {
  private boolean isGood;
  public void setGood(boolean isGood)
  {
  this.isGood = isGood;
  }

  public boolean isGood()
  {
  return isGood;
  }
  }

  这个实体Bean增加了一个是否是好男人的属性。

  Woman.java

  package com.kuaff.ejb3.singleinheritance;

  import javax.ej

来源:http://www.tulaoshi.com/n/20160129/1488509.html

延伸阅读
标签: Java JAVA基础
引言 期待以久的EJB3.0规范在最近发布了它的初稿。在本文中将对新的规范进行一个概要性的介绍,包括新增的元数据支持,EJBQL的修改,实体Bean模型访问bean上下文的新方法和运行时环境等等。作者还讨论了EJB在未来要作出的调整以及EJB3.0与其他开发规范之间的关系。 开始 无论如何由于EJB的复杂性使之在J2...
标签: Java JAVA基础
在EJB2.1的规范中需要实现ejbTimeout方法,当然还有ejbPassivate、ejbRemove等方法。在EJB3.0中,只有你想用它们的时候,你才必须创建它们,否则不必实现。 这个例子主要有5个文件,这个例子的Bean是一个无状态会话Bean: NewsTimer.java:业务接口。 NewsTimer.java:业务实现类。将来我们开发的EJB也都是这...
标签: Java JAVA基础
在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上。事实上,一个实体Bean可以映射到多张表上。在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表。在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表、性别表这两个表。 从表可以使用@Secon...
标签: Java JAVA基础
实体bean的属性可以是java基本对象、Date等,事实上,实体Bean的属性也可以是其他的java对象。这些Java对象不能直接从持久化上下文中读取,它依赖于主实体bean。不象关联实体Bean,在EJB3.0中不支持依赖值对象的集合。 依赖值对象不支持继承,这将在EJB3.1中在讨论。 依赖类需要使用◎DependentObject来注释: ...
标签: Java JAVA基础
您现在可能已在使用 Javabeans,但还不了解它。如果有支持 Java 的浏览器,那么,在桌面上使用 Javabeans 就没有限制。使用的 Web 页面可以将 beans 作为小应用程序的一部分。您很快就会和作为浏览器可视部分的 Javabeans 交互,然后,那些 Javabeans 将与服务器上的 EJB 接口。这种能力也可以扩展到因特网和内部网。 Java...

经验教程

452

收藏

63
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部