一對一關(guān)聯(lián)
主鍵關(guān)聯(lián):即兩張表通過主鍵形成一對一映射關(guān)系。
TUer.hbm.xml

















TPassport.hbm.xml
















測試代碼:





























一對多關(guān)聯(lián)
用戶TUser和地址TAddress的一對多關(guān)聯(lián)。
單向一對多關(guān)聯(lián)
主控方TUser的映射配置:






















單向一對多的實(shí)現(xiàn)比較簡單,但是存在一個問題,由于是單向關(guān)聯(lián),為了保持關(guān)聯(lián)關(guān)系,我們只能通過主控方對被動方進(jìn)行級聯(lián)更新。如果被關(guān)聯(lián)方的關(guān)聯(lián)字段為“NOT NULL”,當(dāng)Hibernate創(chuàng)建或者更新時,可能出現(xiàn)約束違例。
雙向多對一關(guān)聯(lián)
實(shí)際上是“一對多”與“多對一”關(guān)聯(lián)的組合。也就是說我們必須在主控方配置一對多關(guān)系的基礎(chǔ)上,在被控方配置與其對應(yīng)的多對一關(guān)聯(lián)。
TUser.hbm.xml

























在one-to-many關(guān)系中,將many一方設(shè)置為主控方(inverse=“true”)將有助于性能的改善。
TAddress.hbm.xml























多對多關(guān)聯(lián)
需要借助中間表來完成多對多映射信息的保存。
由于多對多關(guān)聯(lián)的性能不佳(由于引入了中間表,一次讀取操作需要反復(fù)多次查詢),因此在設(shè)計(jì)中應(yīng)該避免大量使用。同時,在多對多關(guān)系中,應(yīng)根據(jù)情況,采取延遲加載機(jī)制來避免無謂的性能開銷。
TGroup與TRole的多對多關(guān)聯(lián):
TGroup.hbm.xml:

























cascade=“save-update”,對于多對多邏輯而言,很少出現(xiàn)刪除一方需要級聯(lián)刪除所有關(guān)聯(lián)數(shù)據(jù)的情況,如刪除一個group,一般不會刪除其中包含的Role。
column=“group_id”映射表中對于t_group表記錄的標(biāo)識字段。
TRole.hbm.xml:


























