聯合主鍵的使用

在建數據庫表的時候,有時候會用對象的多個屬性來作爲主鍵,這就是聯合主鍵。

聯合主鍵的使用:先把實體類建好,然後把作爲主鍵的屬性寫到一個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;
}
}

發佈了22 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章