Hibernate5入门(四)映射之总结

目录

一、实体类

二、映射文件

三、数据维护

四、保存顺序

五、外键


学习笔记,为了加强记忆和深入理解在此记录备忘。如有错误和理解不当之处,还望指正。万分感谢!

另外,实例和内容有些是参照网络其他博文,如有侵权可联系删掉。


前面说了Hibernate的几种映射关系,今天总结以下他们之间的异同。以下对比都是以双向为基础的对比。

以老师和学生为例,老师为主。

一、实体类

对象一对一一对多多对多
整体

都需要引入对方的对象

一方引入多方的对象集合

多方引入一方的对象

都需要引入对方的对象集合

老师

老师实体类中引入学生对象

private Student student;

 

老师引入学生集合

private Set<Student> students;

 

老师引入学生对象集合

private Set<Student> students;

 

学生

学生实体类中引入老师对象

private Teacher teacher;

 

学生引入老师对象

private Teacher teacher;

 

学生引入老师对象集合

private Set<Teacher> teacher;

 

二、映射文件

对象一对一一对多多对多
主键关联外键关联
老师

老师增加one-to-one元素

<one-to-one name="student" class="Student" />

 

在one-to-one中指定property-ref属性

 

<one-to-one name="student" class="Student" property-ref="teacher" />

 

增加set元素

<set name="emps" table="t_teacher"><key column="teaId" /><one-to-many class="Student" /></set>

 

增加set元素,注意其中的属性和前边是不一样的

<set name="students" table="t_stu_tea"><key column="teaId" /><many-to-many class="Student" column="stuId"/></set>

 

学生

主键策略为foreign,同时指定主键;增加one-to-one元素

<generator class="foreign"><param name="property">teacher</param></generator>

 

主键策略正常配置,one-to-one改为many-to-one,指定unique属性

<many-to-one name="teacher" class="demo.entity.Teacher"column="teaId" unique="true" />

 

增加many-to-one元素

<many-to-one name="dept" column="deptId" class="Dept" />

 

和上边的一样

三、数据维护

关于inverse属性:

inverse主要用在一对多和多对多双向关联上,inverse可以被设置到集合标签<set>上,默认inverse为false,所以我们可以从“一”的一端和“多”的一端维护关联关系,如果设置成inverse为true,则我们只能从多一端来维护关联关系
 

一对一一对多多对多
主键关联外键关联

必须通过老师设置学生,否则会报错

student.setTeacher(teacher);

必须通过老师设置学生,否则外键会为空

student.setTeacher(teacher);

通过学生(多)设置老师(一)

student.setTeacher(teacher);

 

双方都可以,但是不能有重叠

四、保存顺序

一对一一对多多对多
主键关联外键关联

先保存老师(主)

后保存学生

先保存老师(主)

后保存学生

先保存老师(主)

后保存学生

没有顺序要求

五、外键

一对一一对多多对多
主键关联外键关联

没有多加字段,学生的主键即老师的外键

学生增加外键字段,指向老师主键

学生增加了外键字段,指向老师的主键

关联表字段分别为俩表的外键,并且这俩个字段形成组合主键
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值