上次的博文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; private Classes classes; 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 Classes getClasses() { return classes; } public void setClasses(Classes classes) { this.classes = classes; } }
通過對比之前我們在上篇博文Hibernate從入門到精通(八)一對多單向關聯映射中的關於一對多 單向關聯映射的相應的類結構圖和代碼。可以發現,一對多雙向關聯向和單向關聯的區別主要是在多的一端加 入了一的一端的對象,這就將單向關聯變成了雙向關聯。
為了更好說明兩者的區別,我們再看一下一對多 雙向關聯映射的表結構和相應的Hibernate映射配置。具體如下:
<class name="com.zs.hibernate.Classes" table="t_classes"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="students" inverse="true"> <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"/> <many-to-one name="classes" column="classesid"/> </class>
從存儲結構上看,一對多單向關聯和雙向關聯沒有什麼區別,但是從配置文件上看 ,一對多雙向關聯的配置文件中在多的一端的配置文件上存在<many-to-one />的相關配置,即保證多 對一的映射,這就保證了雙向。
通過本次的講解,關於一對多雙向關聯的內容,我們就講解完畢了, 一對多映射是一個比較常用和重要的映射關系,希望讀者認真思考這部分內容,下次我們講多對多映射的相關 內容。