上次的博文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,則將無法保存數據等等。這些問題如 何解決,這就需要引出我們下次講解的一對多雙向關聯映射了。