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