日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java hibernate 表关联_Hibernate多表关联

發(fā)布時間:2025/3/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java hibernate 表关联_Hibernate多表关联 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、多對一進行關聯(多個學生對應同一間宿舍)---學生是主體,宿舍是附體,關聯關系在主體學生中設置,在學生類中設置宿舍類,由于宿舍類只有一個可以直接用類來設置,在映射學生類(User)中包含宿舍這個類(Room),在映射配置文件(User.hbm.xml)中定義

哪個是主體類就在哪個配置文件定義關聯關系.

cascade屬性:表示關聯對象的持久化,該屬性也要設置在主體中,作用就是當主控方執(zhí)行操作時,關聯對象(被動方)是否同步執(zhí)行同一操作.

cascade的值:all:表示所有情況下都進行級聯操作.

none:所有情況下都不進行級聯操作

save-update:在執(zhí)行save-update時進行級聯操作.

delete:在執(zhí)行delete時進行級聯操作.

注意:使用cascade自動持久化時,會先檢查被關聯物件的id屬性,未被持久化的物件之id屬性是由unsaved-value決定,預設是null,如果您使用long這樣的原生型態(tài)(primitive type)時,則必須自行指定預設值.

例如:

如果您不想額外設定unsaved-value資訊,則可以將long改為Long,這可以符合預設的unsaved-value為null的設定?.

二、一對多進行關聯(一間宿舍對應多個學生)---宿舍是主體,學生是附體,關聯關系在主體宿舍中設置,由于要在宿舍類中設置學生類,一個宿舍包含多個學生,所以在宿舍類中要用Set類來進行設置,用set類(private Set users = new HashSet();)來存儲多個學生類,在映射宿舍類(Room)中要包含這個節(jié)點,用來與user相關聯

例如:

name:表示屬性,table:表示關聯的表名,key:表示通過什么字段進行關聯,:表示關聯類。這里也可以使用cascade屬性。

三、在表關聯的設計中,不論是一對多還是多對一,都要將關聯字段設置在多的那一方。

例如:user表格和room表格,要將關聯字段room_id設置在user表格中。

四、一對一進行關聯(一個人只有一個房間,一個房間也只有一個人)。

可以通過2中方式進行關聯:

(1)、通過外鍵進行關聯:在多對一的例子中就是通過外鍵進行關聯的.

在user-room的設置中(user.hbm.xml):

column="ROOM_ID"

class="onlyfun.caterpillar.Room"

cascade="all"

unique="true"/>

其中unique表示限制一個User有一獨有的 Room,這只是單向的,說明一個user只有一個room.

在room-user的設置中(room.hbm.xml):

class="onlyfun.caterpillar.User"

property-ref="room"/>

這樣就完成了雙向的一對一關聯,property-ref告訴hibernate,查詢出user并將其參考至room。

(2)、通過主鍵進行關聯:限制兩個資料表的主鍵使用相同的值,如此一個User與Room就是一對一關係

user.hbm.xml:

class="onlyfun.caterpillar.Room"

cascade="all"/>

room.hbm.xml:

class="onlyfun.caterpillar.User"

constrained="true"/>

使用constrained="true"告訴Hibernate參考至User的主鍵

五、雙向關聯,就是將一和二結合起來,如果將關聯的維護交給User的話會比較容易,因為每個User都對應至一個Room,在儲存時並用像Room一樣必須對Set中的每個物件作檢查,為了將關聯的維護交給User,我們可以在Room.hbm.xml中的修改,加上inverse="true",表示將關聯的維護「反過來」交給User作例如:?????????????

在設立雙向關聯時,關聯由多對一中「多」的哪一方維護,會比由「一」的哪一方維護來的方便,在Hibernate可以藉由inverse來設定,不設定inverse基本上也可以運行,但是效能會較差

總結

以上是生活随笔為你收集整理的java hibernate 表关联_Hibernate多表关联的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。