美文网首页
Hibernate(三)——映射关系

Hibernate(三)——映射关系

作者: 贾里 | 来源:发表于2018-02-12 17:14 被阅读7次

    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做存储.

    image.png

    7.组件映射(略)

    image.png image.png image.png

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

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


    image.png image.png

    相关文章

      网友评论

          本文标题:Hibernate(三)——映射关系

          本文链接:https://www.haomeiwen.com/subject/eyfdtftx.html