關聯關系的本質是将關聯關系映射到資料庫中。關聯關系在對象模型中展現為記憶體中的一個或多個引用。 一對多關系: 一對多關系 分為“單向一對多/多對一關系”和“雙向多對一”關系。
• “單向一對多/多對一關系”隻需在“一”/“多”方進行配置,
• “雙向多對一關系”需要在關聯雙方均加以配置。 雙向多對一關聯就是在多方和一方都進行配置,并在“一” 方通過屬性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維護多的一端。
總之,一對多和多對一的映射政策是一緻的,都是通過在"多"的一端添加一個外鍵指向"一"的一端,隻是站的角度不同。
本文轉自 yzzh9 51CTO部落格,原文連結:http://blog.51cto.com/java999/119424,如需轉載請自行聯系原作者