龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

EJB 3.0开发指南之多表映射

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上。事实上,一个实体Bean可以映射到多张表上。在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到
在前面的例子中,我们每一个实体Bean只映射到数据库中的一张表上。事实上,一个实体Bean可以映射到多张表上。在一些需要字典表的项目上会经常用到,象以前我做过的项目,使用到很多国标规定的数据表。在我们下面这个例子中,性别作为一个字典表存在,学生这个实体将映射到学生信息表、性别表这两个表。
  
  从表可以使用@SecondaryTable来注释:
  
   @Target({TYPE}) @Retention(RUNTIME)
  
  public @interface SecondaryTable {
   String name();
   String catalog() default "";
   String schema() default "";
   JoinColumn[] join() default {};
   UniqueConstraint[] uniqueConstraints() default {};
  }
  这个注释可以指定表名、分类、schema、联合列、约束等。假如你使用多张表,你可以使用下面的注释来声明多张表:
  
   @SecondaryTable
  @Target({TYPE}) @Retention(RUNTIME)
  
  public @interface SecondaryTables {
   SecondaryTable[] value() default {};
  }
  这个例子主要有以下几个文件,这个例子主要实现了治理学生的功能。Student是一个实体Bean,这个Bean的name属性是一个类,也就是Name类,这个Name类就是一个依靠值对象。学生的性别映射到第二张表中。StudentDAOBean是一个无状态的会话Bean,用来调用实体Bean。和前面的例子一样,我们还是使用Client测试。
  
  这个例子和上一个例子基本相同,只是Student.Java和Client有所不同。
  
   Student.java:实体Bean。
  
   Name.java:实体Bean所依靠的类。
  
   StudentDAO.java:会话Bean的业务接口
  
   StudentDAOBean.java:会话Bean的实现类
  
   Client.java:测试EJB的客户端类。
  
   jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。
  
   Build.XML:ant 配置文件,用以编译、发布、测试、清除EJB。
  
  下面针对每个文件的内容做一个介绍。
  
   Student.java
  
  package com.kuaff.ejb3.secondary;
  
  import javax.ejb.Dependent;
  import javax.ejb.DependentAttribute;
  import javax.ejb.Column;
  import javax.ejb.Entity;
  import javax.ejb.GeneratorType;
  import javax.ejb.Id;
  import javax.ejb.Table;
  import javax.ejb.SecondaryTables;
  import javax.ejb.SecondaryTable;
  import javax.ejb.JoinColumn;
  
  @Entity
  @Table(name = "STUDENT")
  @SecondaryTables({
  @SecondaryTable(name = "GENDER", join = {@JoinColumn(name = "GENDER_ID")})
  })
  
  public class Student implements java.io.Serializable
  {
   private int id;
   private Name name;
   private String grade;
   private String email;
   private String gender;
  
   @Id(generate = GeneratorType.AUTO)
  
   public int getId()
   {
  return id;
   }
  
   public void setId(int id)
   {
  this.id = id;
   }
  
   public void setName(Name name)
   {
  this.name = name;
   }
  
  @Dependent({ @DependentAttribute(name = "first", column ={ @Column(name = "FIRST") }),
  
  @DependentAttribute(name = "last", column ={ @Column(name = "LAST") }) })
  
  public Name getName()
  {
   return name;
  }
  
  public void setGrade(String grade)
  {
   this.grade = grade;
  }
  
  @Column(name = "GRADE")
  
  public String getGrade()
  {
   return grade;
  }
  
  public void setEmail(String email)
  {
   this.email = email;
  }
  
  @Column(name = "EMAIL")
  
  public String getEmail()
  {
   return email;
  }
  
  public void setGender(String gender)
  {
   this.gender = gender;
  }
  
  @Column(name = "gender", secondaryTable = "GENDER")
  
  public String getGender()
  {
   return gender;
  }
  
  }
  
  Student.java实现了Student实体Bean,它提供学生的基本情况。在类上声明上加上了第二张表的注释:
  
  
  
精彩图集

赞助商链接