Hibernate中一對多和多對一關係

http://blog.sina.com.cn/s/blog_4b5bc0110100z483.html


1、單向多對一和雙向多對一的區別?
只需要從一方獲取另一方的數據時 就使用單向關聯
雙方都需要獲取對方數據時 就使用雙向關係

部門--人員

使用人員時
如果只需要獲取對應部門信息(user.getdeptarment())
不需要 從部門下的人員信息時,就配置成單向 多對一

使用部門時
如果只需要獲取部門下人員信息(deptartmanet.getusers())
不需要 從人員獲取部門信息時,就配置成單向 一對多

既要獲取部門下人員 deptartmanet.getusers()
又要從人員獲取部門信息 user.getdeptarment()

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

看需求來配置了。

關聯關係的本質是將關聯關係映射到數據庫中。關聯關係在對象模型中體現爲內存中的一個或多個引用。  一對多關係: 一對多關係 分爲單向一對多/多對一關係雙向多對一關係。
    • 單向一對多/多對一關係只需在方進行配置,
    • 雙向多對一關係需要在關聯雙方均加以配置。 雙向多對一關聯就是在多方和一方都進行配置,並在 方通過屬性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)通常都是交給多方

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章