程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> EJB 3.0開發指南之多表映射

EJB 3.0開發指南之多表映射

編輯:JAVA編程入門知識
在前面的例子中,我們每一個實體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,它提供學生的基本情況。在類上聲明上加上了第二張表的注釋:
  
  
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved