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>