Hibernate的多表操作
2019-10-22 本文已影响0人
东风谷123Liter
以前我们都是通过sql语句连关联两个或多个表。
表之间的关系(实体之间的关系):
-
一对一
-
一对多
- 在多的一方创建指向一方的外键
-
多对多
- 创建一个中间表,用来存放两个表的主键作为外键。
一对多hibernate的关系配置
-
实体关系,在多的一方的实体中创建一个一的一方的实体。在一的一方实体上创建一个多的一方的实体集合。
-
创建映射文件,有几个实体就需要几个映射文件。
-
image.png
-
image.png
-
一对多的联级保存和更新
-
什么叫级联:是指保存一个对象时,是否会保存其相关联的对象。
-
级联试有方向性的:
-
操作一的一方时候,是否操作到多的一方
-
操作多的一方时候,是否操作一的一方
-
-
-
不使用级联,容易出现瞬时对象异常。
-
需要配置一下
-
image.png
-
[图片上传中...(image-c80a29-1571756535362-0)]
-
-
image.png
-
-
一对多的级联删除:
-
默认:删除数据,将键设置为null。级联删除一定要先删除,再删除。
- 情况1: image.png
-
情况2: 基本不用,删除多的一方,级联去删除一的一方。实际情况中不合理,很少用。
-
-
双向维护关系产生多余SQL
-
image.png
-
解决办法:单向维护、使一的一方放弃外键维护权。
- image.png
-
一对多的关联查询的修改的时候。(CRM练习)
-
-
区分cascade和inverse:
- image.png
多对多:
-
可以用两个一对多来完成。
-
也可以,双方都需要有一下配置。实体中都用set集合来关联对方对象。
-
image.png
-
级联维护的时候,需要被动方放弃。
-
‘多对多的级联删除基本用不上。
-
image.png
-
多对多的其他的操作:(重要)
-
给用户去 选择角色,改选角色,删除角色(给学生课程,修改选课,删除选课)
- image.png
- image.png
- image.png
-