zoukankan      html  css  js  c++  java
  • Hibernate映射一对多双向关联关系及部门关联属性


    一对多双向关联关系:(Dept/Emp的案例)

          既可以根据在查找部门时根据部门去找该部门下的所有员工,又能在检索员工时获取某个员工所属的部门。


    步骤如下:

      1.构建实体类(部门实体类加set员工集合)

      2.准备持久化类的映射文件部门配置中,植入一对多配置

      3.构建大配置,关联小配置

      4.构建测试类


     1.构建实体类(部门类)

      使用Set集合可以使保存的内容不重复。

    员工类:


     2.准备持久化类的映射文件

     Dept小配置:

    <set>元素的name属性:设定持久化类的属性名。此处为Dept类的emps属性。

    <set>元素还包含两个子元素:

    《1》.<key>元素:column属性设定与所关联的持久化类对应的表的外键。

    《2》.<one-to-many>元素:class属性设定与所关联的持久化类。

     Emp小配置:


     3.构建大配置,关联小配置(关键代码)


    4.构建测试类:


    cascade属性

           none:当Session操纵当前对象时,忽略其他关联的对象。它是cascade属性的默认值.

          Save-update:当通过Session的save()、update()及saveOrUpdate()方法来保存或更新当前对象时,级联保存所有关联的新建的瞬时状态的对象,并且级联更新所有关联的游离状态的对象。

          Delete:当通过Session的delete()方法删除当前对象时,会级联删除所有关联的对象。

         当通过Session的delete()方法删除当前对象时,会级联删除所有关联的对象。

          All:包含save-update,delete的行为。

    解析:

      级联也就是说当我们保存持久化对象A的时候自动帮我们保存持久化对象B

      问题:cascade属性写在什么位置?

      注:一对一或者多对一的时候,直接写在标签上,其他的写在set标签上。

      如何实现添加部门的同时自动添加员工?

      解析:可以使用cascade(级联)方式

     

    Test:双向关联  通过add()将新建的员工对象添加部门下


     

    <Set>元素下的inverse属性(反转)

      inverse属性指定了关联关系中的方向。

      inverse设置为false,则为主动方,由主动方负责维护关联关系,默认是false

      注意:inverse 决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用,也就是只对one-to-manymany-to-many有效(因为只有这两种关联关系包含集合,而one-to-onemany-to-one只含有关系对方的一个引用)。

      说明:如果我既给员工指定了自己所属的部门,又将员工添加到部门集合中。那么这个时候reverse不设置,生成以下sql

      inverse设置为true,不负责维护关联关系。


     

     

  • 相关阅读:
    The nineteenth day
    The eighteen day
    弱读下
    弱读上
    失爆 爆破音
    连读
    The seventeenth day
    The sixteenth day
    React 官方脚手架 create-react-app快速生成新项目
    pc端引入微信公众号文章
  • 原文地址:https://www.cnblogs.com/hq-123/p/5833917.html
Copyright © 2011-2022 走看看