<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
与上面差不多,双向配置即可