1、單向多對一和雙向多對一的區別?
只需要從一方獲取另一方的資料時 就使用單向關聯
雙方都需要獲取對方資料時 就使用雙向關係
部門--人員
使用人員時
如果只需要獲取對應部門資訊(user.getdeptarment())
不需要 從部門下的人員資訊時,就配置成單向 多對一
使用部門時
如果只需要獲取部門下人員資訊(deptartmanet.getusers())
不需要 從人員獲取部門資訊時,就配置成單向 一對多
既要獲取部門下人員 deptartmanet.getusers()
又要從人員獲取部門資訊 user.getdeptarment()
那就 配置成雙向一對多,也就是雙向多一
看需求來配置了。
關聯關係的本質是將關聯關係對映到資料庫中。關聯關係在物件模型中體現為記憶體中的乙個或多個引用。一對多關係: 一對多關係 分為「單向一對多/多對一關係」和「雙向多對一」關係。
• 「單向一對多/多對一關係」只需在「一」/「多」方進行配置,
• 「雙向多對一關係」需要在關聯雙方均加以配置。 雙向多對一關聯就是在多方和一方都進行配置,並在「一」方通過屬性inverse="true"設定控制關係反轉
注:單向多對一關聯是最常見的單向關聯關係。
注:雙向多對一關聯是最常見的雙向關聯關係。雙向多對一關聯實際上是「多對
一」與「一對多」關聯的組合。
多對一及一對多關聯對映的區別(單向):
不管多對一還是一對多,都是在"多"的一端新增乙個外來鍵指向"一"的一端,只不過是多對一是在多的一端為其自己添外來鍵,而一對多則是在一的一端為多的一端新增外主鍵。
模型:乙個使用者組(group)對應多個使用者(user)。
多對一關聯對映:是在"多"的一端新增乙個外來鍵指向"一"的一端,它維護的關係為多到一的關係,如:當載入乙個使用者(user)時將會同時載入組(group)的資訊。它的關係對映將寫在多的一端(user):
此時它在多的一端(user)新增了乙個外來鍵「relategroup」指向一的一端。在多的一端通過group維護一的一端。
一對多關聯對映:是在"一"的一端為多的一端新增外主鍵,它維護的關係為一到多的關係,如:當載入乙個組(group)時將會同時載入此組使用者(user)的資訊。它的關係對映將寫在一的一端(group):
="name">
="com.dvnchina.hibernate.user"/>
此時通過="relatedgroup"/>在多的一端(user)新增了乙個外來鍵「relategroup」指向一的一端。在一的一端通過users維護多的一端。
總之,一對多和多對一的對映策略是一致的,都是通過在"多"的一端新增乙個外來鍵指向"一"的一端,只是站的角度不同。
個人總結:
1、cascade寫在某方,表示在操作此方時,與此方關聯的另一方是否被操作。此關聯是指操作時物件中包含的物件(比如儲存部門時,dept.setem(em),em物件也被儲存)。
比如部門表--員工表,雙向多多對一,cascade="delete"寫在部門表,那麼表示在刪除部門時與此部門相關的員工也全部被刪除!
2、關係的維護(inverse)通常都是交給多方
下面一對多的雙向關聯是圖,有關寫法和結果:
hibernate單向一對多和雙向一對多
單向一對多 例如有部門封裝類 private int deptno private string deptname private string location 有職員封裝類 private int empno private string empname private dept dept 在多...
hibernate3中 一對多 和多對一的檢索策略
在一對多的情況下。class 和student 為one to many 對映關係 在class 班級物件中,存在如下對映 無論lazy 設定為true 還是false 只要設定了outer join 為true 將採用左外連線檢索策略檢索class 關聯的student 物件,傳送如下sql 語句...
hibernate 的多對多的關聯和一對多的關聯
資料庫的多對多 1.1 資料庫中不能直接對映多對多 處理 建立乙個橋接表 中間表 將乙個多對多關係轉換成兩個一對多 注1 資料庫多表聯接查詢 永遠就是二個表的聯接查詢 a b c d t1 c t2 d t3a b ab select from a,b,ab where a.aid ab.aid a...