• 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-many或many-to-many有效(因为只有这两种关联关系包含集合,而one-to-one和many-to-one只含有关系对方的一个引用)。

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

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

    更多详情请关注 http://www.cnblogs.com/baixingqiang/
  • 相关阅读:
    反射、面向对象(基础篇)
    配置文件
    模块补充 、迭代器和 生成器
    模块
    正则表达式
    冒泡排序、递归和简单装饰器
    使用Apache Archiva管理Maven仓库
    AppScan9.0.3.5漏洞扫描记录
    Linux环境下安装Websphere8.5.5
    如何排查网络通讯状况
  • 原文地址:https://www.cnblogs.com/baixingqiang/p/5834051.html
Copyright © 2020-2023  润新知