hibernate 一對多 多對一 關係的理解

2021-07-06 01:09:56 字數 2140 閱讀 3310

1、單向多對一和雙向多對一的區別?

只需要從一方獲取另一方的資料時 就使用單向關聯

雙方都需要獲取對方資料時 就使用雙向關係

部門--人員

使用人員時

如果只需要獲取對應部門資訊(user.getdeptarment())

不需要 從部門下的人員資訊時,就配置成單向 多對一

使用部門時

如果只需要獲取部門下人員資訊(deptartmanet.getusers())

不需要 從人員獲取部門資訊時,就配置成單向 一對多

既要獲取部門下人員 deptartmanet.getusers()

又要從人員獲取部門資訊 user.getdeptarment()

那就 配置成雙向一對多,也就是雙向多一

看需求來配置了。

2、策略

關聯關係的本質是將關聯關係對映到資料庫中。關聯關係在物件模型中體現為記憶體中的乙個或多個引用。

一對多關係: 一對多關係 分為

「單向一對多/多對一關係」和

「雙向多對一

」關係。

• 「單向一對多/多對一關係

」只需在「一

」/「多

」方進行配置,

• 「雙向多對一關係

」需要在關聯雙方均加以配置。 雙向多對一關聯就是在多方和一方都進行配置,並在「一

」方通過屬性inverse="true"設定控制關係反轉

注:單向多對一關聯是最常見的單向關聯關係。

注:雙向多對一關聯是最常見的雙向關聯關係。雙向多對一關聯實際上是「多對

一」與「一對多

」關聯的組合。

多對一及一對多關聯對映的區別(單向):

不管多對一還是一對多,都是在"多"的一端新增乙個外來鍵指向"一"的一端,只不過是多對一是在多的一端為其自己添外來鍵,而一對多則是在一的一端為多的一端新增外主鍵。

模型:乙個使用者組(group)對應多個使用者(user)。

多對一關聯對映:是在"多"的一端新增乙個外來鍵指向"一"的一端,它維護的關係為多到一的關係,如:當載入乙個使用者(user)時將會同時載入組(group)的資訊。它的關係對映將寫在多的一端(user):

<

many-to-one 

name="group"

column

="relatedgroup" 

cascade

="all" 

/>

此時它在多的一端(

user

)新增了乙個外來鍵

「relategroup

」指向一的一端。在多的一端通過

group

維護一的一端。

一對多關聯對映:是在"一"的一端為多的一端新增外主鍵,它維護的關係為一到多的關係,如:當載入乙個組(group)時將會同時載入此組使用者(user)的資訊。它的關係對映將寫在一的一端(group):

<

set 

name="users"

order-by

="name"

>

<

key 

column

="relatedgroup"

/>

<

one-to-many 

class

="com.dvnchina.hibernate.user"

/>

set>

此時通過

<

key 

column

="relatedgroup"

/>

在多的一端(

user

)新增了乙個外來鍵

「relategroup

」指向一的一端。在一的一端通過

users

維護多的一端。

總之,一對多和多對一的對映策略是一致的,都是通過在"多"的一端新增乙個外來鍵指向"一"的一端,只是站的角度不同。

個人總結:

1、cascade寫在某方,表示在操作此方時,與此方關聯的另一方是否被操作。此關聯是指操作時物件中包含的物件(比如儲存部門時,dept.setem(em),em物件也被儲存)。

比如部門表--員工表,雙向多多對一,cascade="delete"寫在部門表,那麼表示在刪除部門時與此部門相關的員工也全部被刪除!

2、關係的維護(inverse)通常都是交給多方

hibernate 一對多(多對一)

舉個例子 乙個國家有多個省份,多個省份只有乙個國家,這個就是多對一和一對多,兩者就是看物件的角度問題 多對一關聯對映 在多的一端加入外來鍵指向一的一端,他維護的關係是多指向一 一對多關聯對映 在多的一端加入外來鍵指向一的一端,它維護的關係是一指向多 也就是說一對多和多對一的對映策略是一樣的,只是站的...

hibernate註解一對多 多對一

註解 多對一刪除時 只執行多的一方而一不會改變 新增時考慮 一的一方主鍵是否存在 cascade表示級聯操作 cascadetype.merge級聯更新 cascadetype.persist級聯重新整理 cascadetype.refresh級聯儲存 cascadetype.remove級聯刪除 ...

一對多 多對一

pip install djangorestframework 3.9.2 pip install markdown 3.0.1 markdown support for the browsable api.pip install django filter 2.1.0 filtering supp...