1. 程式人生 > >1.9 ID生成策略(xml方式的聯合主鍵)

1.9 ID生成策略(xml方式的聯合主鍵)

例如Teacher表中三個欄位:name,lian,title。其中name和lian是聯合主鍵。具體做法如下:

1.定義StudentPK類,在其中設定Student的主鍵。

public class StudentPK implements java.io.Serializable{
private String name;
private int lian;

        public String getName(){

}。。。。。。。。。。

@Override
public boolean equals(Object o) {
if(o instanceof StudentPK) {
StudentPK pk = (StudentPK)o;
if(this.id == pk.getId() && this.name.equals(pk.getName())) {
return true;
}
}
return false;
}

@Override
public int hashCode() {
return this.name.hashCode();
}

為什麼要實現序列化介面,因為記憶體滿了之後,計算機會將一部分資料放入虛擬記憶體,這時候就需要實現序列化了。實現equals方法是為了確保兩個Student物件是同一人。實現hashcode方法是因為物件都裝在hash表裡。

hash表的原理如下:一個數組,每個位置上有對應的hash碼,而每個位置上存的是一個連結串列,連結串列上每個節點的物件hash碼都相同。例如現在有個hash碼為1的student物件,怎麼找到與它相同的物件呢,先找hash碼的位置,再找主鍵相同的物件,即可找到。


2.在Student類中,去掉name和lian欄位。定義StudentPK欄位及其get和set方法。

public class Student {

private StudentPK pk;

3.執行時候的程式碼

StudentPK pk=new StudentPK();

pk.setname();

pk.setlian();

Student s =new Student();
        s.setpk(pk);
        s.setsex(25);

.....save(s);儲存

4.Student.hbm.xml中的配置

<class name="com.bjsxt.hibernate.Student">
<composite-id name="pk" class="com.bjsxt.hibernate.StudentPK">
<key-property name="name"></key-property>
<key-property name="lian"></key-property>
</composite-id>