<set name="address" table="preson_address">
<!-- 指定連接表中記錄外鍵的列名-->
<key column="preson_id"/>
<!-- column 指定連接表中關聯對象對應的列名-->
<many-to-many class="Address" column="address_id">
</set>
一:1-N 關聯:
(1):無連接表的單項1-N 多 關聯 <one-to-many>
<set name="" >
<key name=""/>
<one-to-many class="">
</set>
(2) 有連接表的 單項 1-N
<set name="集合屬性名稱" table="連接表的表名">
<key name="指定連接表的參照外物的列名/>
<many-to-many class="" column="" unique="true"/>
</set>
(3) 無連接表 雙向 1-N
1:端的配置如下:
<set name="addr" inverse="true">
<!--指定連接表中參照本表的外鍵名 -->
<key column="stu_id"></key>
<!-- 映射到關聯屬性-->
<one-to-many class="Address" />
</set>
N:端的配置
column 指定關聯屬性對應的外鍵列名 與上面的 key colum 必須一致
<many-to-one name="stuinf" class="StudentInf" column="stu_id" not-null="true"/>
注意 1:先持久化 1 一端的對象,這樣能爲 N 端持久化時候提供外鍵值
2:先設置 1 端和 N 端的關聯關係。 再之久話 N 端
3:inverse = true 所以,我們不要通過 1 端來設置和 N 端的關聯關係。
執行如下:
Hibernate: insert into student_inf (name, age) values (?, ?)
Hibernate: insert into address_inf (ad, stu_id) values (?, ?)
Hibernate: insert into address_inf (ad, stu_id) values (?, ?)
(4) 有連接表的雙向 1-N
N 端的配置:
<!-- 有外連接表的 1-N N 端配置 -->
<join table="stu_addr">
<!-- colum 指定的是 持久化類在表中 外鍵關聯的列名-->
<key column="addr_id"></key>
<!--column 指定的是關聯類在 表中的外鍵列名 -->
<many-to-one name="stuinf" class="StudentInf" column="stu_id" not-null="true"/>
</join>
1: 端的配置:
<set name="addr" inverse="true" table="stu_addr">
<!-- 指定連接表的外鍵 -->
<!-- colum 指定的是 持久化類在表中 外鍵關聯的列名-->
<key column="stu_id"></key>
<!-- 有連接表的 1-N 多用 many-to-many -->
<!--column 指定的是關聯類在 表中的外鍵列名 -->
<many-to-many class="Address" column="addr_id" unique="true"/>
</set>
執行結果:
Hibernate: insert into student_inf (name, age) values (?, ?)
Hibernate: insert into address_inf (ad) values (?)
Hibernate: insert into stu_addr (stu_id, addr_id) values (?, ?)
Hibernate: insert into address_inf (ad) values (?)
Hibernate: insert into stu_addr (stu_id, addr_id) values (?, ?)
二:1-1 關聯映射的配置
(1)基於主鍵的 單項 1-1
<!-- 基於外鍵的主鍵是根據生成策略 foreign 表明根據主鍵來生成該主鍵-->
<id name="id" column="person_id">
<generator class="foregin">
<param name="property">address</param>
</generator>
<property name="" column=""/>
<one-to-one name="address">
</id>
(2)基於外鍵的 非連接表 單項 1-1
其實就是many-to-one 增加屬性 unique = "true"
<many-to-one name="address" class="Address" cascade="all" unique="true" column="address_id"/>
(3)有連接表的 單項 1-1 (其實就是 有連接表的 many-to-one)
<join table="person_addre">
<key column="person_id"/>
<many-to-one name="address" class="Addrerss" column="address_id">
</join>
下面的都與上面的相類似只是在 雙面都配置
(4) 基於外鍵的雙向 1-1
(5) 基於主鍵的雙向 1-1
(6) 有連接表的雙向 1-1
三: N-N 關聯
(1)單向 N-N 關聯
(2)雙向 N-N
與上面差不多,雙向配置即可