上次的博文Hibernate從入門到精通(七)多對一單向關聯映射我們主要講解了一下多對一單向關聯映射, 這次我們繼續講解一下一對多單向映射。
一對多單向關聯映射
在講解一對多單向關聯之前,按 照我們的慣例首先看一下其相應的類結構圖和代碼。具體如下:

public class Classes {
private int id;
private String name;
private Set students;
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;
}
public Set getStudents() {
return students;
}
public void setStudents(Set students) {
this.students = students;
}
}
public class Student {
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;
}
}
對比一對多關聯映射和我們之前講的多對一關聯映射,可以發現兩種映射原理是一致的,都是在多 的一端加入一個外鍵,指向一的一端。它們的區別在於維護的關系不同,多對一維護的是多指向一的關系,有 了此關系,在加載多的時候可以將一加載上來,一對多維護的是一指向多的關系,有了此關系,在加載一的時 候可以將多加載上來。
為了更好說明上述的結論,我們再看一下 一對多關聯映射的表結構和相應的Hibernate映射配置。具體如下:

<class name="com.zs.hibernate.Classes" table="t_classes">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="students">
<key column="classesid"/>
<one-to-many class="com.zs.hibernate.Student"/>
</set>
</class>
<class name="com.zs.hibernate.Student" table="t_student">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
通過上面表中數據和我們之前關於多對一(參考Hibernate從入門到精通(七)多對 一單向關聯映射)的對比,我們就可以清晰的看出,在一對多中,僅僅添加了一個<set/>標簽,將多對 一中的一改為多而已,如果將集合看成一個整體,則兩者實際上就沒有區別了。
一對多單向關聯映射 缺陷
到此為止,關於一對多單向關聯基本,但是細心的讀者可能發現了在一對多中的一的一端維護關 系是有缺陷的。例如:在保存Student的時候關系字段classesid為null,則將無法保存數據等等。這些問題如 何解決,這就需要引出我們下次講解的一對多雙向關聯映射了。