目录
学习笔记,为了加强记忆和深入理解在此记录备忘。如有错误和理解不当之处,还望指正。万分感谢!
另外,实例和内容有些是参照网络其他博文,如有侵权可联系删掉。
前面说了Hibernate的几种映射关系,今天总结以下他们之间的异同。以下对比都是以双向为基础的对比。
以老师和学生为例,老师为主。
一、实体类
对象 | 一对一 | 一对多 | 多对多 |
整体 | 都需要引入对方的对象 | 一方引入多方的对象集合 多方引入一方的对象 | 都需要引入对方的对象集合 |
老师 | 老师实体类中引入学生对象
| 老师引入学生集合
| 老师引入学生对象集合
|
学生 | 学生实体类中引入老师对象
| 学生引入老师对象
| 学生引入老师对象集合
|
二、映射文件
对象 | 一对一 | 一对多 | 多对多 | |
主键关联 | 外键关联 | |||
老师 | 老师增加one-to-one元素
| 在one-to-one中指定property-ref属性
| 增加set元素
| 增加set元素,注意其中的属性和前边是不一样的
|
学生 | 主键策略为foreign,同时指定主键;增加one-to-one元素
| 主键策略正常配置,one-to-one改为many-to-one,指定unique属性
| 增加many-to-one元素
| 和上边的一样 |
三、数据维护
关于inverse属性:
inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,默认inverse为false,所以我们可以从“一”的一端和“多”的一端维护关联关系,如果设置成inverse为true,则我们只能从多一端来维护关联关系
一对一 | 一对多 | 多对多 | |
主键关联 | 外键关联 | ||
必须通过老师设置学生,否则会报错 | 必须通过老师设置学生,否则外键会为空 | 通过学生(多)设置老师(一)
| 双方都可以,但是不能有重叠 |
四、保存顺序
一对一 | 一对多 | 多对多 | |
主键关联 | 外键关联 | ||
先保存老师(主) 后保存学生 | 先保存老师(主) 后保存学生 | 先保存老师(主) 后保存学生 | 没有顺序要求 |
五、外键
一对一 | 一对多 | 多对多 | |
主键关联 | 外键关联 | ||
没有多加字段,学生的主键即老师的外键 | 学生增加外键字段,指向老师主键 | 学生增加了外键字段,指向老师的主键 | 关联表字段分别为俩表的外键,并且这俩个字段形成组合主键 |