Hibernate(三)——映射关系

1.多对一映射


Hibernate(三)——映射关系_第1张图片
image.png
Hibernate(三)——映射关系_第2张图片
image.png
Hibernate(三)——映射关系_第3张图片
image.png

2.一对多映射


一对多:
不是说一个部门对应多个employees集合.
而是说一个部门对于employees集合中的多个元素(员工).


Hibernate(三)——映射关系_第4张图片
image.png
Hibernate(三)——映射关系_第5张图片
image.png
image.png
Hibernate(三)——映射关系_第6张图片
image.png
Hibernate(三)——映射关系_第7张图片
image.png
image.png

3.双向多对一映射


Hibernate(三)——映射关系_第8张图片
image.png
Hibernate(三)——映射关系_第9张图片
image.png
Hibernate(三)——映射关系_第10张图片
image.png
Hibernate(三)——映射关系_第11张图片
image.png

选择

任何时候,都可以直接删除many方.
在双向的one2many/many2one中,
1,inverse=false的时候,可以直接删除one方(先把所有many方的外键设置为空);
2,inverse=true的时候,不能直接删除one方;(外键约束--->HQL)

开发中多对一,一对多,单向和双向的选择?
1:绝大多数的大多数情况都是使用:单向的many2one即可.
在开发中,添加many方数据的时候,都是通过下拉列表选择one方.
2:少数情况,会使用双向的多对一(对象成树状结构(自连接查询/部门)/组合关系).
但是注意,此时inverse一定要设置为true.
3:很难使用到one2many.

使用双向管理映射,至少都会发生5条SQL.
先保存部门,再保存员工.
通过分析SQL,发现其实只需要前3条SQL就可以完成数据保存操作.
后面两天UPDATE语句,是因为one方也想维护关系,故意发出的.
如此一来,性能就低了.
如果是双向关联映射,我们要让one方放弃管理,(one方不负责关系维护).


Hibernate(三)——映射关系_第12张图片
image.png

4.一对一(略)


Hibernate(三)——映射关系_第13张图片
image.png
Hibernate(三)——映射关系_第14张图片
image.png
Hibernate(三)——映射关系_第15张图片
image.png
Hibernate(三)——映射关系_第16张图片
image.png

5.多对多(略)


Hibernate(三)——映射关系_第17张图片
image.png
Hibernate(三)——映射关系_第18张图片
image.png
Hibernate(三)——映射关系_第19张图片
image.png

6.映射枚举类型


image.png
Hibernate(三)——映射关系_第20张图片
image.png

枚举对象:有序号(ordinal,从0开始)和元素名称(MAN).
所以:我要表示user.setGender(Gender.WOMAN);
Gender.WOMAN存储到数据库有两种形式:
第一种:使用序号1来存储(默认).
第二种:使用元素名WOMAN做存储.

Hibernate(三)——映射关系_第21张图片
image.png

7.组件映射(略)

Hibernate(三)——映射关系_第22张图片
image.png
Hibernate(三)——映射关系_第23张图片
image.png
Hibernate(三)——映射关系_第24张图片
image.png

问题1:之前设计one2one的时候,是让customer表和customerprofile表分别存储信息.
其实,我们可以使用一张表来存储客户的基本信息和拓展信息.怎么做?
问题2:上图的公司的对象的营业地址和注册地址如何做配置.

在一个宿主对象中,如果出现了两个相同的组件对象,一定要修改列的名称.


Hibernate(三)——映射关系_第25张图片
image.png
Hibernate(三)——映射关系_第26张图片
image.png

你可能感兴趣的:(Hibernate(三)——映射关系)