Hibernate一對多單向關聯和雙向關聯映射方法及其優缺點

一對多關聯映射和多對一關聯映射實現的基本原理都是一樣的,既是在多的一端加入一個外鍵指向一的一端外鍵,而主要的區別就是維護端不同。
它們的區別在於維護的關係不同:

一對多關聯映射是指在加載一的一端數據的同時加載多的一端的數據

多對一關聯映射是指在加載多的一端數據的同時加載一的一端的數據

而單向一對多關聯映射是在一的一端維護關係的,具有以下的缺點:

必須先保存多的一端後纔可以保存一的一端,所以在保存多的一端時多的一端不知道一的一端是否存在相應的數據,所以只能將維護的關係字段設置爲null,如果爲非空則無法保存。因爲是一的一端維護關係,所以在保存一的一端時,會發出多餘的update語句維護多的一端的外鍵關係。

下面舉例說明配置一對多的單向關聯和雙向關聯的映射方法:

涉及到的一端和多端的類結構參考這篇文章:Hibernate一對多關聯映射的配置及其級聯刪除問題

一對多雙向關聯映射的配置(可參考上面提供的文章):

在一的一端的集合上採用<key>標籤進行映射:

<set name="quesion" inverse="true" cascade="delete">
	<key column="question_type_name"/>
	<one-to-many class="Question"/>
</set>

在多的一端加入一個外鍵private QuestionType questionType; 採用<many-to-one>標籤進行映射:

<many-to-one name="questionType" column="question_type_name"/>

一對多雙向關聯映射一般讓多的一端維護關係,所以需要設置inverse屬性爲true,表示本段不維護關係,而交給另一端維護,既是多的一端。同時也可以使用設置cascade進行級聯操作,如上面一篇文章的級聯刪除設置:cascade=”delete”,表示刪除一的一端的同時刪除關聯的多的一端的所有數據。

一對多單向關聯映射:

一對多單向關聯映射 多的一端Question不需要加入外鍵private QuestionType questionType; 只需要在一的一端的集合上採用<key>標籤進行映射,映射代碼如下:

<set name="quesion" inverse="true" cascade="delete">
	<key column="question_type_name"/>
	<one-to-many class="Question"/>
</set>
除了文章中有特別說明,均爲IT宅原創文章,轉載請以鏈接形式註明出處。
本文鏈接:http://www.itzhai.com/hibernate-one-to-many-unidirectional-and-bidirectional-association-mapping-method-and-its-advantages-and-disadvantages.html
關鍵字: Hibernateone-to-many
發佈了24 篇原創文章 · 獲贊 21 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章