一、一對多(1...n)
- 在多的一方,添加一的一方的主鍵作爲外鍵。
過程:與單表操作不同的是,兩個表中通過外鍵關聯,因此在實體類的創建、配置**.hbm.xml文件都會發生變化
- 實體類的創建,與單表操作不同的是
一的一方(放置多的一方的集合) 多的一方(放置一的一方的對象)
Class A(){ Class B(){
Set<B> bs = new HashSet<B>() ; A a;
} }
- **.hbm.xml文件配置
①一的一方配置
<!--配置一對多的映射:放置多的一方的集合-->
<!--
set標籤:
name:多的一方的對象集合的屬性名稱
cascade :級聯操作
inverse : 在一的一方 放棄外鍵維護權
一對多關聯修改的時候
key標籤:
column:多的一方的外鍵名
one-to-many
class :一的一方類的全路徑
-->
<set name="linkMans" cascade="save-update" inverse="false">
<key column="lkm_cust_id"/>
<one-to-many class="com.jjxy.hibernate.LinkMan" />
</set>
②多的一方配置
<!--配置一對多的關係:放置是一方的對象-->
<!--
many-to-one標籤
name :一的一方對象的屬性名稱
class :一的一方類的全路徑
column:在多的一方表的外鍵名稱
-->
<many-to-one name="customer" cascade="save-update" column="lkm_cust_id"
class="com.jjxy.hibernate.Customer"/>
二、多對多
- 產生中間表,引入兩張表的主鍵作爲外鍵,兩個主鍵成爲聯合主鍵。
- 實體類的創建,與單表操作不同的是
一的一方(放置多的一方的集合) 多的一方(放置一的一方的對象)
Class A(){ Class B(){
Set<B> bs = new HashSet<B>() ; Set<A> as = new HashSet<A>() ;
} }
- **.hbm.xml文件配置
①A的一方配置
<!--建立與角色多對多的關係-->
<!-- set
name : 對方集合的屬性
table :多對多所需要的中間表
-->
<set name="users" table="sys_user_role" inverse="true">
<!-- key
column :當前對象所需中間表的外鍵名稱
-->
<key column="role_id"/>
<!-- many-to-many
class : 對方類的全路徑
column :對方表在中間表中的外鍵名稱
-->
<many-to-many class="com.jjxy.hibernate.User" column="user_id" />
② B的一方的配置(與A的一方的配置相反)
<!--建立與角色多對多的關係-->
<!-- set
name :對方集合的屬性
table :多對多所需要的中間表
-->
<set name="roles" table="sys_user_role" cascade="save-update">
<!-- key
column :當前對象所需中間表的外鍵名稱
-->
<key column="user_id"/>
<!-- many-to-many
class : 對方類的全路徑
column :對方表在中間表中的外鍵名稱
-->
<many-to-many class="com.jjxy.hibernate.Role" column="role_id" />
</set>
三、一對一
- 在任意一張表中引入對方的主鍵作爲外鍵(開發使用非常少)。