一、一对多(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>
三、一对一
- 在任意一张表中引入对方的主键作为外键(开发使用非常少)。