Hibernate集合映射中的inverse属性以及cascade级联

2023-12-26 15:18

本文主要是介绍Hibernate集合映射中的inverse属性以及cascade级联,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Inverse属性

Inverse属性,是在维护关联关系的时候起作用的。

         表示控制权是否转移。(在一的一方起作用)

 

Inverse , 控制反转。

Inverse = false  不反转;   当前方有控制权

True  控制反转; 当前方没有控制权

 

只在集合映射中才能使用。


注意:<one-to-many /> 和<many-to-one />中并没有这个属性

维护关联关系中,是否设置inverse属性:

1. 对保存数据有影响。

  如果设置控制反转,inverse=true, 然后通过部门方维护关联关系。在保存部门的时候,同时保存员工, 数据会保存,但关联关系不会维护。即外键字段为NULL


save操作测试


数据库:


2. 对于获取数据没有影响。(此处省略操作结果)

3. 对解除关联关系有影响

inverse=false,(控制权还在Dept)  可以解除关联



inverse=true,  当前方(部门)没有控制权,不能解除关联关系,(不会生成update语句,也不会报错)



4. 对删除数据的关联关系有影响。

inverse=false, 有控制权, 可以删除。先清空外键引用,再删除数据。







inverse=true,  没有控制权: 如果删除的记录有被外键引用,会报错,违反主外键引用约束!  如果删除的记录没有被引用,可以直接删除。



cascade 属性

cascade  表示级联操作  【可以设置到一的一方或多的一方】

none          不级联操作, 默认值

save-update     级联保存或更新

delete   级联删除

save-update,delete    级联保存、更新、删除

all                 同上。级联保存、更新、删除


cascade级联操作(这里以save-update为例)





我们看到级联之后操作员工表中并没有出现 与部门关联的 主键值。问题就出在我们将inverse设置为true了。







下面我们总结一下 ,inverse  和 cascade  的 区别:

作用的范围不同: 
     Inverse是设置在集合元素中的。 
   Cascade对于所有涉及到关联的元素都有效。 
   <many-to-one/><ont-to-many/>没有inverse属性,但有cascade属性 
执行的策略不同 
   Inverse 会首先判断集合的变化情况,然后针对变化执行相应的处理。 
   Cascade 是直接对集合中每个元素执行相应的处理 
执行的时机不同 
     Inverse是在执行SQL语句之前判断是否要执行该SQL语句 
     Cascade则在主控方发生操作时用来判断是否要进行级联操作 
执行的目标不同 
     Inverse对于<ont-to-many>和<many-to-many>处理方式不相同。 
   对于<ont-to-many>,inverse所处理的是对被关联表进行修改操作。 
   对于<many-to-many>,inverse所处理的则是中间关联表 
     Cascade不会区分这两种关系的差别,所做的操作都是针对被关联的对象。

区别引用自https://www.cnblogs.com/zsping/p/5835765.html




这篇关于Hibernate集合映射中的inverse属性以及cascade级联的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539916

相关文章

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Java中基于注解的代码生成工具MapStruct映射使用详解

《Java中基于注解的代码生成工具MapStruct映射使用详解》MapStruct作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣... 目录介绍优缺点优点缺点核心注解及详细使用语法说明@Mapper@Mapping@Mappings@Co

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10