1.多对一映射
image.png image.png image.png
2.一对多映射
一对多:
不是说一个部门对应多个employees集合.
而是说一个部门对于employees集合中的多个元素(员工).
image.png image.png image.png image.png image.png image.png
3.双向多对一映射
image.png image.png image.png 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方不负责关系维护).
image.png
4.一对一(略)
image.png image.png image.png image.png
5.多对多(略)
image.png image.png image.png
6.映射枚举类型
image.png image.png
枚举对象:有序号(ordinal,从0开始)和元素名称(MAN).
所以:我要表示user.setGender(Gender.WOMAN);
Gender.WOMAN存储到数据库有两种形式:
第一种:使用序号1来存储(默认).
第二种:使用元素名WOMAN做存储.
7.组件映射(略)
image.png image.png image.png问题1:之前设计one2one的时候,是让customer表和customerprofile表分别存储信息.
其实,我们可以使用一张表来存储客户的基本信息和拓展信息.怎么做?
问题2:上图的公司的对象的营业地址和注册地址如何做配置.
在一个宿主对象中,如果出现了两个相同的组件对象,一定要修改列的名称.
image.png image.png
网友评论