在建數據庫表的時候,有時候會用對象的多個屬性來作爲主鍵,這就是聯合主鍵。
聯合主鍵的使用:先把實體類建好,然後把作爲主鍵的屬性寫到一個class中作爲聯合主鍵類
在寫聯合主鍵類時,聯合主鍵類必須實現serializable接口,而且聯合主鍵類必須重寫equals()方法和hashCode()方法,這樣做的目的是爲了確保唯一性。
在實體類中用註解把相應的ID和其他一些屬性設置好。
Example:
建一個Wife類:
@Entity
@IdClass(WifePK.class) //聯合主鍵的屬性所在的類
public class Wife {
private int id;
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Id //要作爲聯合主鍵的屬性
public int getId() {
return id;
}
@Id //要作爲聯合主鍵的屬性
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
聯合主鍵類:
public class WifePK implement serializable {
//主鍵類必須實現serializable接口
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//聯合主鍵類必須重寫equals()方法和hashCode()方法
@Override
public boolean equals( Object o){
if ( o instanceof WifePK){
WifePK pk =(WifePK)o;
if(this.id==pk.getId()&& this.name.equals(pk.getName()))
return true;
}
return false;
}
@Override
public int hashCode(){
return this.name.hashCode();
}
}
建立一個Husband類,並設置表的關係:
@Entity
public class Husband {
private int id;
private String name;
private Wife wife;//這是一個引用,用來連接Husband與Wife之間的對應
@Id
@GeneratedValue
public int getId() {
return id;
}
public String getName() {
return name;
}
@OneToOne
//可以默認 也可以自己設置名字
@JoinColumns(
{
@JoinColumn(name="wifeId",referencedColumnName="id"),//自己設定外鍵名字
@JoinColumn(name="wifeName",referencedColumnName="name")
}
)
public Wife getWife() {
return wife;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}