持久化API(JPA)系列(八)實體關係映射(ORM)之單表映射@EmbeddedId

本文將介紹《聯合主鍵:使用@EmbeddedId嵌入外部主鍵》

上文是通過@IdClass引用外部主鍵,聯合主鍵也可以採用嵌入式主鍵替代。


1)新建外部主鍵類Family2.java

設置聯合主鍵man和woman,因此外部主鍵也需要定義兩個相同的變量,並添加一個以兩個變量爲輸入的構造函數,同時添加getter/setter函數。

主鍵類必須滿足:

1.必須實現Serializable接口,必須有默認的public無參數的構造方法

2.必須覆蓋equals和hashCode方法,這些要求與使用複合主鍵的要求相同。

將主鍵類使用@Embeddable標註,表示這是一個嵌入式類。

 

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package com.tgb.itoo.exam.entity;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. import javax.persistence.Embeddable;  
  6.   
  7. @SuppressWarnings("serial")  
  8. @Embeddable  
  9. public class Family2PK implements Serializable {  
  10.   
  11.     private String man;//丈夫  
  12.     private String woman;//妻子  
  13.   
  14.     public Family2PK() {  
  15.   
  16.     }  
  17.   
  18.     public Family2PK(String man, String woman) {          
  19.         this.man = man;  
  20.         this.woman = woman;  
  21.     }  
  22.   
  23.     ....//同Family.java中的函數    
  24. }  

2)使用@EmbeddedId在試題Bean類Family2.java中嵌入外部主鍵

通過註釋符來設定與表、字段的映射關係。

該類有如下特點:

1.映射的表名爲family2.java,目的是與上文Demo中family.java區分

2.通過@EmbeddedId標籤嵌入了外部主鍵Family2PK的實例id,表示被嵌入的主鍵變量

3.並分別添加一個無參和有參的構造函數,來常見id的實例。

4.在getMan()、setMan()、getWoman()、setWoman()函數中,分別引用id的值。

  

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package com.tgb.itoo.exam.entity;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. import javax.persistence.Column;  
  6. import javax.persistence.EmbeddedId;  
  7. import javax.persistence.Entity;  
  8. import javax.persistence.Id;  
  9. import javax.persistence.IdClass;  
  10. import javax.persistence.Table;  
  11.   
  12. @SuppressWarnings("serial")  
  13. @Entity  
  14. @Table(name="family2")  
  15. public class Family2 implements Serializable {  
  16.   
  17.     @EmbeddedId  
  18.     private Family2PK id;//嵌入式主鍵      
  19.   
  20.     private String address;// 地址  
  21.   
  22.     //初始化  
  23.     public Family2() {    
  24.         this.id=new Family2PK();  
  25.     }  
  26.       
  27.     public Family2(String man,String woman) {  
  28.         this.id=new Family2PK(man,woman);  
  29.     }  
  30.           
  31.     @Column(name="man")  
  32.     public String getMan() {  
  33.         return this.id.getMan();  
  34.     }  
  35.   
  36.     public void setMan(String man) {  
  37.         this.id.setMan(man);  
  38.     }  
  39.   
  40.     @Column(name="woman")  
  41.     public String getWoman() {  
  42.         return this.id.getWoman();  
  43.     }  
  44.   
  45.     public void setWoman(String woman) {  
  46.         this.id.setWoman(woman);  
  47.     }  
  48.   
  49.     @Column(name="address" ,length=100)  
  50.     public String getAddress() {  
  51.         return address;  
  52.     }  
  53.   
  54.     public void setAddress(String address) {  
  55.         this.address = address;  
  56.     }  
  57.   
  58. }  

3)新建遠程接口類Family2DAORemote.java

定義兩個接口:新增、根據主鍵查詢

同上文:FamilyDAORemote.java

4)開發實現類Family2DAO.java

1.首先構造一個主鍵對象Family2PK
2.後調用find()方法根據該主鍵對象進行查詢

同上文:FamilyDAO.java

 5)測試:客戶端調用

同上文:Family2DAOClient.java

============================================================================

總結

      通過兩個Demo可以看出,使用@IdClass指定外部主鍵和使用@EmbeddedId嵌入外部主鍵,的主要區別在於兩個文件:FamilyPK.java主鍵類和Family.java,接下來通過截圖對比一下吧:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章