一.一对多关联映射
- 数据库表与表之间的关系
- 一对多关系
- 多对多关系
- 一对一关系
唯一外键对应: 假设是一对多的关系,在多的一方创建外键指向一的主键,将外键设置为unique
主键对应 : 让某个表的主键作为另外一个表的主键
- 一对多关系配置
- 创建一个项目,引入相应jar包
- 创建数据库和表
- 创建实体
一的一方 : 放置的是多的一方的集合,Hibernate默认使用的是Set集合
多的一方 : 放置的是一的一方的对象
- 创建映射文件
- 多的一方的映射的创建
* name :一的一方的对象的属性名称
* class :一的一方的类的全路径
* column :多的一方的表的外键的名称<many-to-one name="customer" class="com.mine.hibernate.domain.Customer" column="lkm_cust_id">
</many-to-one> - 一的一方的映射的创建
* name :多的一方的对象集合的属性名称
* column :多的一方的表的外键的名称
* class :多的一方的类的全路径
<set name="linkMans">
<key column="lkm_cust_id"></key>
<one-to-many class="com.mine.hibernate.domain.LinkMan"/>
</set>
- 多的一方的映射的创建
- 创建核心配置文件
- 引入日志,引入工具类
- 编写测试类
二.一对多相关操作
- 一对多关系只保存一边 : 不可以
- 一对多的级联操作
- 级联 : 指的是,操作一个对象的时候,是否会同时操作其关联的对象
- 级联有方向性
操作一的一方的时候,是否操作到多的一方
操作多的一方的时候,是否操作到一的一方
- 级联保存或更新
保存客户级联联系人
需要在客户的配置文件Customer.hbm.xml中Set标签里添加属性cascade="sava-update"
<set name="linkMans" cascade="save-update">
保存联系人级联客户
需要在联系人的配置文件LinkMan.hbm.xml中标签里添加属性cascade="sava-update" - 级联删除
删除一边的时候,同时将另一方的数据也一并删除
删除客户 级联删除联系人
需要在客户的配置文件Customer.hbm.xml中Set标签里添加属性cascade="sava-update , delete" - 一对多设置了双向关联会产生多余的SQL语句
- 单向维护
- 使一方放弃外键维护权
一的一方放弃
需要在客户的配置文件Customer.hbm.xml中Set标签里添加属性inverse="true"
- 区分cascade和inverse:
cascade负责的是 : 关联关系
inverse负责的是: 外键控制
三.多对多的关联映射
- 创建表
用户表,角色表,中间表 - 创建实体
用户实体 : 放置的是角色的集合
角色实体 : 放置的是用户的集合 - 创建映射文件
- 级联保存
保存用户级联保存角色
保存角色级联保存用户 - 级联删除(基本用不上)
四.多对多的其它操作
- 给用户选择角色
- 给用户改选角色
- 给用户删除角色