一對多:乙個部門對應多個員工,乙個員工只能屬於乙個部門。乙個客戶對應多個聯絡人,乙個聯絡人只能屬於乙個客戶
一對多建表:在多的一方建立外來鍵。
多對多:乙個學生可以選擇多門課程,一門課程可以被多個學生選擇。乙個使用者可以選擇多個角色,乙個角色可以被多個使用者選擇。
多對多建表:建立中間表。中間表至少有兩個字段分別作為外來鍵指向多對多雙方的主鍵。
一對一(了解):
一般可以建成一張表。
乙個公司只能有乙個註冊位址,乙個註冊位址只能被乙個公司註冊。
建表原則:
唯一外來鍵對應,外來鍵加約束unique來保證一對一
主鍵對應
表架構:
實體類配置:
對映檔案配置:
多的一方:
一的一方:
測試:
一對多的級聯操作:
級聯:是否會同時操作其關聯的物件。級聯室友方向性的,操作一的一方的時候是否會操作多的一方;操作多的一方是否會操作一的一方
級聯儲存更新:
儲存客戶級聯聯絡人,操作的主體是客戶,需要在customer.hbm.xml中進行配置
儲存聯絡人級聯客戶
級聯儲存或更新:儲存聯絡人級聯客戶,操作的主體是聯絡人,需要在linkman.hbm.xml中進行配置
測試物件導航:
級聯刪除:
刪除一方,將另一方的資料也一併刪除
刪除客戶級聯刪除聯絡人:沒有設定級聯刪除,預設情況:hibernate修改了聯絡人的外來鍵,使其為null,然後刪除客戶
修改設定,刪除客戶就刪除聯絡人:
刪除聯絡人級聯刪除客戶(基本不用)
將2號聯絡人原來是1號客戶,現在劃給2號客戶:
雙向關聯產生多餘的sql語句(客戶和聯絡人的配置裡都設定了外來鍵(coloum="lkm_cust_id")),都能維護外來鍵。
解決辦法:一的一方放棄外來鍵維護權。關係維護方由多的一方管理。
區分inverse和cascade
其實可以使用兩個一對多,利用中間表模擬多對多的關係
多對多建立雙向關係時,因為兩個欄位都能插入中間表,造成重複,讓被動方放棄外來鍵維護權。
建表:使用者角色和中間表
配置:
domain:
hbm:
基本操作測試:
級聯儲存:先讓被級聯的一方放棄維護權
@test級聯刪除(基本不用):刪除使用者級聯刪除角色,配置使用者cascade:delete/*** 多對多級聯儲存,儲存使用者級聯儲存角色
*/public
void
demo2()
@test
/*** 多對多級聯儲存,儲存角色級聯使用者
*/public
void
demo3()
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...