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,不负责维护关联关系。


     

     

  • 相关阅读:
    C++11 序列化库 cereal
    Eigen 3.3.7 数组类(Array)和元素操作
    Java【 final、权限、内部类、引用类型】学习笔记
    Java多态学习笔记
    学习GUI编程第二天笔记
    GUI编程小测试
    第一篇学习笔记(Typora使用手册)
    Spring Boot2 系列教程(九)Spring Boot 整合 Thymeleaf
    Spring Boot2 系列教程(七)理解自动化配置的原理
    Spring Boot2 系列教程(六)自定义 Spring Boot 中的 starter
  • 原文地址:https://www.cnblogs.com/hq-123/p/5833917.html
Copyright © 2011-2022 走看看