Hibernate级联(cascade)与反转(inverse)详解

  • 内容
  • 评论
  • 相关

在 Hibernate 的关联关系中,可以使用单向关联关系,也可以使用双向关联关系,在双向关联关系中,Hibernate 会同时控制双方的关系,这样在程序操作时,很容易出现重复操作的问题。

为了解决这一问题,Hibernate 提供了反转操作,同时,为了在操作多表时,主表(主控方)操作后的数据能与关联表的数据保持一致,Hibernate 还提供了级联操作。接下来将对这两种操作进行详细讲解。

反转操作

在映射文件的 <set> 标签中,有一个 inverse(反转)属性,它的作用是控制关联的双方由哪一方管理关联关系。

inverse 属性值是 boolean 类型的:

  • 当取值为 false(默认值)时,表示由当前这一方管理双方的关联关系,如果双方 inverse 属性都为 false 时,双方将同时管理关联关系。
  • 取值为 true 时,表示当前一方放弃控制权,由对方管理双方的关联关系。

通常情况下,在一对多关联关系中,会将“一”的一方的 inverse 属性取值为 true,即由“多”的一方维护关联关系,否则会产生多余的 SQL 语句;而在多对多的关联关系中,任意设置一方的 inverse 属性为 true 即可。

通过《Hibernate多对多映射关系详解》教程的学习,读者已经了解了多对多关联的单向关联,接下来结合反转操作演示多对多双向关联的情况。

1. 修改 ManyToManyTest 类

在《Hibernate多对多映射关系详解》教程的 ManyToManyTest 的第 29~30 行代码之间添加课程对学生的关联,具体代码如下所示:

//课堂关联学生
c1.getStudents().add(s1);
c1.getStudents().add(s2);
c2.getStudents().add(s1);
c2.getStudents().add(s2);

使用 JUnit 测试运行 test1() 方法,其进度条显示为红色,表明运行结果没有通过,此时 JUnit 控制台中的报错信息如图 1 所示。

JUnit视图
图 1  JUnit视图

本文标题:Hibernate级联(cascade)与反转(inverse)详解

本文地址:https://www.hosteonscn.com/5807.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注