Hibernate中的雙向的一對一的關聯關係

2021-08-05 19:47:54 字數 1384 閱讀 8473

前邊我們講過了雙向的一對多的關聯關係,即在域模型中,多的一方含有乙個一的一方的引用變數,而在一的一方含有乙個多的一方的類的集合物件。在hbm.xml檔案中,多的一方使用many-to-one節點來對映多的表的外來鍵對應的一的表的主鍵;一的一方使用set節點來對映一的一方的主鍵對應的多的一方的外來鍵,同時指明one-to-many的物件類。需要注意的是,我們可以在set節點中使用inverse=true將多的一方的hbm.xml檔案的維護一對多關係的任務反轉給多的一方的hbm.xml檔案,這樣在執行插入操作的時候先插入一的一方的物件再插入多的一方的物件就不會產生多餘的update語句了。

今天我們來講一講雙向的一對一的關聯關係。以下的講解我們以部門和經理人之間的關係為例:

1. 域模型

department類中有乙個manager的屬性變數,manager的類中有乙個department的屬性變數。

2.關係資料模型

兩種對映方式。一是隨便在乙個**中設定乙個外來鍵並按照外來鍵來對映,二是直接按照兩張**的主鍵來對映

① 按照外來鍵來對映

a .我們假若設定department**中有乙個外來鍵manager_id作為manager表中的id主鍵的外來鍵,類似於前邊我們講過的,一對多的雙向關聯關係,但是不同的是我們為這個department**中的manager_id的外來鍵設定乙個唯一的約束從而使這個外來鍵和magager表中的主鍵建立了一對一的關聯關係。

b.  在含外來鍵的department中的hbm.xml檔案中,我們使用 來對映

c .而在不含外來鍵的manager**中,我們使用來對映這種關係。其中需要注意的是property-ref要明確指明該department對應的manager的外來鍵。

d .測試雙向一對一的curd操作

儲存,建議先儲存不含外來鍵的物件再儲存含外來鍵的物件,這樣就不會有update語句而僅僅有insert語句,效率很高。

查詢:先查含外來鍵的一方會預設只查詢此物件並延遲載入關聯的關聯物件,先查不含外來鍵的物件預設的會將含外來鍵的物件一併查出來。

② 使用主鍵來關聯雙向一對一關係

a .域模型

二者各自都在對方的類中存在乙個引用變數。

b . 關係資料模型

departments表的主鍵和managers表的主鍵一一對應。我們在設計這種雙向的一對一的對映模型時,必須隨便指定一方的主鍵是採用foreign策略生成的,即這個主鍵是基於另一張表的主鍵的外來鍵而生成的,而不可自己生成主鍵,但是還是乙個主鍵

c .在department的hbm.xml檔案中,

--描述主鍵生成策略我foreigner

manager  --指明主鍵生成策略的foreign的以來的物件主鍵

---指明主鍵生成策略的foreign的以來的物件主鍵

d . 在manager的hbm.xml檔案中:

Hibernate中雙向關聯載入排序的解決方案

關鍵字 hibernate中雙向關聯載入排序的解決方案 問題 hibernate的雙向關聯中,一方載入另一方時,怎麼樣達到按自定義規則排序的目的呢?例項 角色和選單是多對多的關係,為角色分配選單後,載入選單時,我需要按照選單的id來排序顯示。解決辦法 1.通過在hbm配置檔案中配置解決,需要自定義比...

hibernate關聯雙向多對一的join查詢問題

這是從別人那引用過來的 僅供參考 1.如果沒有在hibernate配置裡做關聯,在hql裡面是不能用join的。2.hql裡面的join是沒有 on 子句的。3.如果是inner join,join的依據就是事先設計好關聯 4.如果要用left join或right join,那麼要採用refere...

Hibernate一對多 雙向

hibernate 雙向關聯就是有 一對多 和 多對一 兩個關聯組合而成德,在雙向關聯的兩端都知道對方是誰。下面就開始演示這種關聯。首先定義我們需要使用的pojo物件。public class member public class order 兩個pojo對應的對映檔案分別為member.hbm....