love fish大鵬一曰同風(fēng)起,扶搖直上九萬(wàn)里

          常用鏈接

          統(tǒng)計(jì)

          積分與排名

          friends

          link

          最新評(píng)論

          EJB3.0之映射(轉(zhuǎn))

          一對(duì)一映射

          雙向一對(duì)一關(guān)系需要在關(guān)系維護(hù)端(owner side)的one2one Annotition定義mappedBy屬性。建表時(shí)在關(guān)系被維護(hù)端(inverse side)建立外鍵列指向關(guān)系維護(hù)端的主鍵列。

          假設(shè)Country 和 Capital 是雙向一對(duì)一的關(guān)系,具體元數(shù)據(jù)聲明如下:

          				
          public class Country {
          	@OneToOne(optional = true,cascade = CascadeType.ALL, mappedBy = "country")
          	private Capital capital;
          }
          
          public class Capital {
          	@OneToOne(optional = false, cascade = CascadeType.ALL)
          	@JoinColumn(name = "COUNTRY_ID", referencedColumnName = "id")
          	private Country country;
                          
          			

          代碼中元數(shù)據(jù)的說(shuō)明:

          元數(shù)據(jù)描述:

          @OneToOne(optional = true,cascade = CascadeType.ALL, mappedBy = "country")

          optional聲明關(guān)系是否是必須存在的,即是否允許其中一端為null。

          cascade聲明級(jí)聯(lián)操作。

          @JoinColumn(name = "COUNTRY_ID", referencedColumnName = "id")

          name聲明外鍵列的名字,referencedColumnName聲明外鍵指向列的列名。

          一對(duì)多映射

          雙向一對(duì)多關(guān)系,一是關(guān)系維護(hù)端(owner side),多是關(guān)系被維護(hù)端(inverse side)。 建表時(shí)在關(guān)系被維護(hù)端建立外鍵列指向關(guān)系維護(hù)端的主鍵列。

          假設(shè)Father 和 Child 是雙向一對(duì)多的關(guān)系,具體元數(shù)據(jù)聲明如下:

          				
          public class Father {
          	@OneToMany(targetEntity = Child.class, cascade = CascadeType.ALL, mappedBy = "father")
          	public List<Child> getChildren() {
          		return children;
          	}
          }
          
          public class Child {
          	@ManyToOne
          	@JoinColumn(name = "FATHER_ID", referencedColumnName = "id")
          	public Father getFather() {
          		return father;
          	}
          }
          
                          
          			

          代碼中元數(shù)據(jù)的說(shuō)明:

          元數(shù)據(jù)描述:

          @OneToMany(targetEntity = Child.class, cascade = CascadeType.ALL, mappedBy = "father")

          targetEntity = Child.class表明關(guān)系另一端的實(shí)體類型

          cascade聲明級(jí)聯(lián)操作。

          mappedBy聲明關(guān)系維護(hù)端的字段(field)名。

          @ManyToOne

          @JoinColumn(name = "FATHER_ID", referencedColumnName = "id")

          name聲明外鍵列的名字,referencedColumnName聲明外鍵指向列的列名。

          多對(duì)多映射

          多對(duì)多映射采取中間表連接的映射策略,建立的中間表將分別引入兩邊的主鍵作為外鍵。

          EJB3對(duì)于中間表的元數(shù)據(jù)提供了可配置的方式,用戶可以自定義中間表的表名,列名。

          假設(shè)Teacher 和 Student是多對(duì)多的關(guān)系,具體元數(shù)據(jù)聲明如下:

          				
          pubic class Teacher{
          	@ManyToMany(targetEntity = Student.class, cascade = CascadeType.PERSIST)
          	@JoinTable(table = @Table(name = "M2M_TEACHER_STUDENT"),
                  joinColumns = @JoinColumn(name = "TEACHER_ID", referencedColumnName = "ID"),
                  inverseJoinColumns = @JoinColumn(name = "STUDENT_ID", referencedColumnName = "ID"))
          	public List<Student> getStudents() {return students;}
          					
          }
          public class Student{
          	@ManyToMany(targetEntity = Teacher.class, mappedBy = "students")
          	public List<Teacher> getTeachers() {
          		return teachers;
          	}
          }
          			
          			

          代碼中元數(shù)據(jù)的說(shuō)明:

          元數(shù)據(jù)描述:

          @ManyToMany(targetEntity = Student.class, cascade = CascadeType.PERSIST)

          targetEntity = Student.class表明關(guān)系另一端的實(shí)體類型。cascade聲明級(jí)聯(lián)操作。

          @JoinTable(table = @Table(name = "M2M_TEACHER_STUDENT"),

          joinColumns = @JoinColumn(name = "TEACHER_ID", referencedColumnName = "ID"),

          inverseJoinColumns = @JoinColumn(name = "STUDENT_ID", referencedColumnName = "ID"))

          JoinTable配置中間表信息,它由3個(gè)部分組成:

          1) table = @Table(name = "M2M_TEACHER_STUDENT") ,聲明中間表的名字

          2) joinColumns ,定義中間表與關(guān)系維護(hù)端的外鍵關(guān)系。

          3) inverseJoinColumns,定義中間表與inverse端的外鍵關(guān)系.

          Inheritance strategy

          EJB3規(guī)定了三種基本的繼承映射策略:

          .每個(gè)類分層結(jié)構(gòu)一張表(table per class hierarchy)

          .每個(gè)子類一張表(table per subclass)

          .每個(gè)具體類一張表(table per concrete class)

          在我們提供的Alpha版本中僅支持第一種映射策略,即每個(gè)類層次一個(gè)表。我們將在下一個(gè)版本中提供每個(gè)具體類一張表的支持, 考慮到性能,這兩個(gè)映射策略也是推薦的映射策略.

          每個(gè)類分層結(jié)構(gòu)一張表(Table per class hierarchy)

          假設(shè)有這么一個(gè)繼承類層次:Employee,兩個(gè)子類FullTimeEmployee,PartTimeEmployee 源代碼如下所示:
          				
          @Entity
          @Table( name="inheritance_Employee" )
          @Inheritance(strategy=InheritanceType.SINGLE_TABLE,
          		discriminatorType=DiscriminatorType.STRING,
          		discriminatorValue="employee")
          public class Employee {...}
          					
          @Entity
          @Inheritance(discriminatorValue="fullTimeEmp")
          public class FullTimeEmployee extends Employee {...}
          
          @Entity
          @Inheritance(discriminatorValue="partTimeEmp")
          public class PartTimeEmployee extends Employee {...}
                          
          			

          代碼中元數(shù)據(jù)的說(shuō)明:

          基類中元數(shù)據(jù)描述:

          @Inheritance(strategy=InheritanceType.SINGLE_TABLE,

          discriminatorType=DiscriminatorType.STRING,discriminatorValue="employee")

          strategy=InheritanceType.SINGLE_TABLE表示繼承映射采用第一種映射策略。

          discriminatorType=DiscriminatorType.STRING表示繼承層次中類型識(shí)別列類型為String.

          discriminatorValue="employee" 表示此類對(duì)應(yīng)的類型識(shí)別碼為employee.

          posted on 2006-07-03 00:52 liaojiyong 閱讀(733) 評(píng)論(0)  編輯  收藏 所屬分類: EJB

          主站蜘蛛池模板: 桐城市| 社旗县| 儋州市| 平泉县| 陇西县| 炉霍县| 卢龙县| 湖南省| 淮南市| 通许县| 镇远县| 黔西| 沛县| 龙井市| 英山县| 莱西市| 耒阳市| 祁门县| 兰溪市| 浦东新区| 泰宁县| 牙克石市| 朝阳县| 克什克腾旗| 芜湖市| 岳普湖县| 文山县| 邵武市| 阳原县| 太白县| 桐庐县| 轮台县| 莱州市| 美姑县| 襄垣县| 新蔡县| 安顺市| 石景山区| 望江县| 巢湖市| 商水县|