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