本文將介紹《聯合主鍵:使用@EmbeddedId嵌入外部主鍵》
上文是通過@IdClass引用外部主鍵,聯合主鍵也可以採用嵌入式主鍵替代。
1)新建外部主鍵類Family2.java
設置聯合主鍵man和woman,因此外部主鍵也需要定義兩個相同的變量,並添加一個以兩個變量爲輸入的構造函數,同時添加getter/setter函數。
主鍵類必須滿足:
1.必須實現Serializable接口,必須有默認的public無參數的構造方法
2.必須覆蓋equals和hashCode方法,這些要求與使用複合主鍵的要求相同。
將主鍵類使用@Embeddable標註,表示這是一個嵌入式類。
-
package com.tgb.itoo.exam.entity;
-
-
import java.io.Serializable;
-
-
import javax.persistence.Embeddable;
-
-
@SuppressWarnings("serial")
-
@Embeddable
-
public class Family2PK implements Serializable {
-
-
private String man;
-
private String woman;
-
-
public Family2PK() {
-
-
}
-
-
public Family2PK(String man, String woman) {
-
this.man = man;
-
this.woman = woman;
-
}
-
-
....
-
}
2)使用@EmbeddedId在試題Bean類Family2.java中嵌入外部主鍵
通過註釋符來設定與表、字段的映射關係。
該類有如下特點:
1.映射的表名爲family2.java,目的是與上文Demo中family.java區分
2.通過@EmbeddedId標籤嵌入了外部主鍵Family2PK的實例id,表示被嵌入的主鍵變量
3.並分別添加一個無參和有參的構造函數,來常見id的實例。
4.在getMan()、setMan()、getWoman()、setWoman()函數中,分別引用id的值。
-
package com.tgb.itoo.exam.entity;
-
-
import java.io.Serializable;
-
-
import javax.persistence.Column;
-
import javax.persistence.EmbeddedId;
-
import javax.persistence.Entity;
-
import javax.persistence.Id;
-
import javax.persistence.IdClass;
-
import javax.persistence.Table;
-
-
@SuppressWarnings("serial")
-
@Entity
-
@Table(name="family2")
-
public class Family2 implements Serializable {
-
-
@EmbeddedId
-
private Family2PK id;
-
-
private String address;
-
-
-
public Family2() {
-
this.id=new Family2PK();
-
}
-
-
public Family2(String man,String woman) {
-
this.id=new Family2PK(man,woman);
-
}
-
-
@Column(name="man")
-
public String getMan() {
-
return this.id.getMan();
-
}
-
-
public void setMan(String man) {
-
this.id.setMan(man);
-
}
-
-
@Column(name="woman")
-
public String getWoman() {
-
return this.id.getWoman();
-
}
-
-
public void setWoman(String woman) {
-
this.id.setWoman(woman);
-
}
-
-
@Column(name="address" ,length=100)
-
public String getAddress() {
-
return address;
-
}
-
-
public void setAddress(String address) {
-
this.address = address;
-
}
-
-
}
3)新建遠程接口類Family2DAORemote.java
定義兩個接口:新增、根據主鍵查詢
同上文:FamilyDAORemote.java
4)開發實現類Family2DAO.java
1.首先構造一個主鍵對象Family2PK
2.後調用find()方法根據該主鍵對象進行查詢
同上文:FamilyDAO.java
5)測試:客戶端調用
同上文:Family2DAOClient.java
============================================================================
總結
通過兩個Demo可以看出,使用@IdClass指定外部主鍵和使用@EmbeddedId嵌入外部主鍵,的主要區別在於兩個文件:FamilyPK.java主鍵類和Family.java,接下來通過截圖對比一下吧: