上次的博文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 />的相關配置,即保證多 對一的映射,這就保證了雙向。
通過本次的講解,關於一對多雙向關聯的內容,我們就講解完畢了, 一對多映射是一個比較常用和重要的映射關系,希望讀者認真思考這部分內容,下次我們講多對多映射的相關 內容。