[置頂] 持久化API(JPA)系列(八)實(shí)體關(guān)系映射(ORM)之單表映射@EmbeddedId
來源:程序員人生 發(fā)布時(shí)間:2015-07-29 08:22:53 閱讀次數(shù):3385次
接上文《持久化API(JPA)系列(7)實(shí)體關(guān)系映照(ORM)之單表映照@IdClass》
本文將介紹《聯(lián)合主鍵:使用@EmbeddedId嵌入外部主鍵》
上文是通過@IdClass援用外部主鍵,聯(lián)合主鍵也能夠采取嵌入式主鍵替換。
1)新建外部主鍵類Family2.java
設(shè)置聯(lián)合主鍵man和woman,因另外部主鍵也需要定義兩個(gè)相同的變量,并添加1個(gè)以兩個(gè)變量為輸入的構(gòu)造函數(shù),同時(shí)添加getter/setter函數(shù)。
主鍵類必須滿足:
1.必須實(shí)現(xiàn)Serializable接口,必須有默許的public無參數(shù)的構(gòu)造方法
2.必須覆蓋equals和hashCode方法,這些要求與使用復(fù)合主鍵的要求相同。
將主鍵類使用@Embeddable標(biāo)注,表示這是1個(gè)嵌入式類。
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;
}
....//同F(xiàn)amily.java中的函數(shù)
}
2)使用@EmbeddedId在試題Bean類Family2.java中嵌入外部主鍵
通過注釋符來設(shè)定與表、字段的映照關(guān)系。
該類有以下特點(diǎn):
1.映照的表名為family2.java,目的是與上文Demo中family.java辨別
2.通過@EmbeddedId標(biāo)簽嵌入了外部主鍵Family2PK的實(shí)例id,表示被嵌入的主鍵變量
3.并分別添加1個(gè)無參和有參的構(gòu)造函數(shù),來常見id的實(shí)例。
4.在getMan()、setMan()、getWoman()、setWoman()函數(shù)中,分別援用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)新建遠(yuǎn)程接口類Family2DAORemote.java
定義兩個(gè)接口:新增、根據(jù)主鍵查詢
同上文:FamilyDAORemote.java
4)開發(fā)實(shí)現(xiàn)類Family2DAO.java
1.首先構(gòu)造1個(gè)主鍵對象Family2PK
2.后調(diào)用find()方法根據(jù)該主鍵對象進(jìn)行查詢
同上文:FamilyDAO.java
5)測試:客戶端調(diào)用
同上文:Family2DAOClient.java
============================================================================
總結(jié)
通過兩個(gè)Demo可以看出,使用@IdClass指定外部主鍵和使用@EmbeddedId嵌入外部主鍵,的主要區(qū)分在于兩個(gè)文件:FamilyPK.java主鍵類和Family.java,接下來通過截圖對照1下吧:


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈