Hibernate多表操作 級聯 外來鍵維護

2022-10-11 11:57:14 字數 2777 閱讀 5938

一對多:乙個部門對應多個員工,乙個員工只能屬於乙個部門。乙個客戶對應多個聯絡人,乙個聯絡人只能屬於乙個客戶

一對多建表:在多的一方建立外來鍵。

多對多:乙個學生可以選擇多門課程,一門課程可以被多個學生選擇。乙個使用者可以選擇多個角色,乙個角色可以被多個使用者選擇。

多對多建表:建立中間表。中間表至少有兩個字段分別作為外來鍵指向多對多雙方的主鍵。

一對一(了解):

一般可以建成一張表。

乙個公司只能有乙個註冊位址,乙個註冊位址只能被乙個公司註冊。

建表原則:

唯一外來鍵對應,外來鍵加約束unique來保證一對一

主鍵對應

表架構:

實體類配置:

對映檔案配置:

多的一方:

一的一方:

測試:

一對多的級聯操作:

級聯:是否會同時操作其關聯的物件。級聯室友方向性的,操作一的一方的時候是否會操作多的一方;操作多的一方是否會操作一的一方

級聯儲存更新

儲存客戶級聯聯絡人,操作的主體是客戶,需要在customer.hbm.xml中進行配置

儲存聯絡人級聯客戶

級聯儲存或更新:儲存聯絡人級聯客戶,操作的主體是聯絡人,需要在linkman.hbm.xml中進行配置

測試物件導航:

級聯刪除:

刪除一方,將另一方的資料也一併刪除

刪除客戶級聯刪除聯絡人:沒有設定級聯刪除,預設情況:hibernate修改了聯絡人的外來鍵,使其為null,然後刪除客戶

修改設定,刪除客戶就刪除聯絡人:

刪除聯絡人級聯刪除客戶(基本不用)

將2號聯絡人原來是1號客戶,現在劃給2號客戶:

雙向關聯產生多餘的sql語句(客戶和聯絡人的配置裡都設定了外來鍵(coloum="lkm_cust_id")),都能維護外來鍵。

解決辦法:一的一方放棄外來鍵維護權。關係維護方由多的一方管理。

區分inverse和cascade

其實可以使用兩個一對多,利用中間表模擬多對多的關係

多對多建立雙向關係時,因為兩個欄位都能插入中間表,造成重複,讓被動方放棄外來鍵維護權。

建表:使用者角色和中間表

配置:

domain:

hbm:

基本操作測試:

級聯儲存:先讓被級聯的一方放棄維護權

@test

/*** 多對多級聯儲存,儲存使用者級聯儲存角色

*/public

void

demo2()

@test

/*** 多對多級聯儲存,儲存角色級聯使用者

*/public

void

demo3()

級聯刪除(基本不用):刪除使用者級聯刪除角色,配置使用者cascade:delete

Hibernate級聯操作

最近在寫專案用到了hibernate,在使用一對多級聯操作的時候遇到了發現無法級聯儲存多的一方,首先介紹一下問題背景 使用者 user 與訂單 order 一對多關係,乙個使用者可以擁有多個訂單 一開始我把使用者存在session域中,在後台我取出了user物件 user u user reques...

hibernate級聯操作

cascadetype.remove 級聯刪除操作。刪除當前實體時,與它有對映關係的實體也會跟著被刪除。cascadetype.merge 級聯更新 合併 操作。當student中的資料改變,會相應地更新course中的資料。cascadetype.detach 級聯脫管 游離操作。如果你要刪除乙個...

HIbernate多表操作(連線)

public class hqljointest session.gettransaction commit session.close 隱式內連線 test public void test2 迫切內連線 迫切內連線得到的結果是直接封裝到po類中,而內連線得到的是object陣列,陣列中封裝的是p...