雙向一對一以部門和經理為例:
a.部門和經理類中各自由對方的引用:(省略了get/set方法)
b.資料庫兩種方式實現:一種(b.1)是外來鍵對映,並將外來鍵新增唯一約束(至於哪個物件的主鍵做外來鍵,可隨意,差別是在獲取關聯物件資料的方式上有些差異);第二種(b.2)方式是:主鍵對映即把外來鍵作為主鍵。例子如下:
b.1:部門表的外來鍵屬於經理表的主鍵;外來鍵manargerz_id設定唯一約束
b.2:主鍵對映:部門表的主鍵屬於經理表的主鍵;(外來鍵做主鍵)
c:對映配置也對應分兩種,c.1外來鍵對映配置和c.2主鍵對映配置
c.1配置外來鍵對映:
部門類對映配置:配置的不同外來鍵所屬的錶業不同:以部門表新增經理id為外來鍵:
以many-to-one 配置外來鍵所屬的表:即當前類所對應的表中新增外來鍵;
colunm:外來鍵的名稱;
unique=true:表示外來鍵唯一,即實現一對一關係
經理類對映配置:
注意:property-ref=mgr 表示:部門類mgr屬性對應的mgr_id列;在獲取經理物件時,會採用左連線的方式查詢出部門資料;連線的條件由該屬性指明;如果沒有該屬性預設 連線的是部門表主鍵而非外來鍵;
c.2主鍵對映的方式:
部門物件對映配置:將部門表中屬於經理表主鍵的外來鍵作為主鍵為例:
上乙個紅框只是主鍵值獲取的方式被確定;後乙個指定約束,即對應的主表的主鍵不能隨意修改的刪除
經理對映配置如下:去掉指定的關聯字段。
hibernate.cfg.xml(下):
d:測試(省略了session的獲取提交和關閉)
d.1外來鍵關聯的測試:
儲存:注意先後順序;順序不同實際執行的步驟不同;
獲取:部門關聯的物件會延遲載入;
通過dept獲取經理物件並使時,在獲取的時候會通過左連線的方式查詢出經理物件;連線條件是經理對映配置中指定列;
(有點奇怪)(在獲取經理物件時,經理物件內的引用部門的物件資料難道是查詢出來的,而不是從session獲取的? 難道這兩個部門物件不是同乙個物件,還是說,只是把資料檢查更新了一遍;或者說獲取某個物件時候,只會單向的從所對應的對映配置中檢視是否有關聯的字段,而不會去從關聯的物件,檢視關聯物件的對映情況,這樣的話,那兩個部門物件就不是同乙個物件了;這樣會出現更多的問題,只能是同乙個物件才不會一直重複去獲取資料了,難道是獲取資料後再從session中快取中比較查詢,而不是先從session查詢?
直接獲取經理物件採用左連線查詢出經理物件同時查詢出部門的資料(這個和一對多不一樣啊:說hibernate不能知道關聯,因為經理表沒有外來鍵,這個解釋有點不通)
c.2主鍵關聯的測試:
儲存:(和外來鍵關聯不同)
順序不同執行過程是一樣的,因為部門記錄插入,總要等到經理資料插入,以便獲取到自己的主鍵值。
獲取:(和外來鍵關聯差不多)
獲取部門物件關聯經理物件會採用延長載入的方式;通過部門物件獲取的經理物件在使用時會,通過連線查詢的方式獲取;
獲取經理資料時,會用一條連線語句同時獲取部門資料
hibernate物件關係
hibernate學習第二天總結 一對一的關係有 共享主鍵見表方式 唯一外來鍵見表方式 共享主鍵建表方式 即一張表的主鍵,做了主鍵又做了外來鍵 person類裡面有乙個passport類的關聯屬性,名字叫做passport,根據傳遞性持久化,要儲存person物件的時候,同時要儲存 passport...
hibernate物件關係對映
一對一主鍵關聯對映 單向person idcard 原理 讓兩個實體的主鍵一樣,這樣就不需要加入多餘的字段了。舉例 乙個人 person 擁有一張身份證 idcard 一對一主鍵關聯對映 雙向person idcard 原理 與上面單項相同,只是需要兩端都需要維護。舉例 同上。person的對映檔案...
Hibernate 物件關係對映
1 例如使用者和組的關係就是多對一關係,多個使用者對應乙個組。2 將實體對映成表。多對一關聯對映在多的一端來維護關聯字段,在使用者一端來維護關係字段 user.hbm.xml檔案 group.hbm.xml檔案 3 在這裡我們看的 就看 hbm.mlx 因為對於類之間的關聯,在實現時,乙個類作為另乙...