inverse 属性仅仅在 set 元素中有,即 one-to-many, many-to-many, many-to-any。
在双向关联的关系中,我们往往会对关联的对象进行操作,操作后Hibernate会根据对象的状态是否改变而对
对象进行更新,也就是维护双方的关系。
部门 和 员工,当我们通过 部门 来修改一个员工的状态,会生成一条update的SQL语句。
当我们通过员工 来 重新设置所属部门时,也会生成一条SQl语句。
看下面一个例子:
Department dept = deptDao.get(1); // 假设该部门 Id = 2
Employeee emp = empDao.get(1); // 假设该员工 Id = 5
dept.getEmployes().add(emp);
emp.setDepartment(dept);
session.save(dept); // 生成的 SQL update employee set departId = 2 where empId = 5
session.save(emp); // 生成的 SQL update employee set departId = 2 where empId = 5
我们看到,不管是以哪个对象来操作之间的关联关系都会生成更新关系的SQL语句。
根据经验来看,我们在添加员工的时候需要给员工分配所属部门,而在添加部门时并不需要添加所属的员工。
所以,当我们添加部门时,不需要根据部门的状态来更新与员工之间的关系。(业务需要)
这时我们就要将关系维护的权利交给 员工,让员工来维护与所属部门间的关系,部门不需要操心那个员工
属于自己。这样 就等于 部门将这个关系交给了 员工,让员工 来拥有控制权,这样 控制权就反转了。
inverse = true ,控制反转。就不由主控方对象负责维护关系了。
这样操作,也有助于提高性能,因为 员工 与 部门 是一对一的关系,而部门 中有很多员工,在保存部门对象
时,就会遍历所有的员工,看是哪个员工与部门发生了关系,进而生成维护关系的SQL语句,这样操作效率会低。
inverse = true 时:
当我们操作 部门 新增 员工 时,不会生成 SQL 语句来跟新员工与部门间的关系。
只有操作 员工 时,给它分配部门 这个动作才会生成相应的 SQL 语句。
inverse = false 时:
当我们操作 部门 时,改变了与某个员工的关系,会生成SQL语句进行维护关系。
当我们操作 员工 时,为员工分配了所属部门,会生成SQL语句进行维护关系。
====================================================================================================
cascade: save-update / delete / all / delete-orphan / all-delete-orphan / none(默认值)
save-update:
当通过 Session 的 save() update() saveOrUpdate() 方法来保存或更新当前对象时,级联保存所有
关联的 临时态 并且 级联更新游离态 的对象。
例如:在 新增部门时,如果在部门里添加了员工,那么就会级联新增那个员工。update也是一样的。
delete:
当删除当前对象时,级联删除与之相关联的对象。
当我们删除部门时,会不会删除所有部门下的员工呢, 如果 cascade = none ,则会将该部门下的
员工的部门字段全部设置为 null,而当 cascade = delete 时,删除部门的同时会删除与之关联的
对象,那么该部门下的所有员工就都会被删除。
all:
会执行与 save-update 和 delete 相同的功能,不仅如此,在对当前对象进行 evict 或 lock 操作的
时候也会对所有关联的对象执行相应的操作。
delete-orphan:
orphan 孤儿,当一个人不隶属于任何一个部门时。。。
就是删除与当前对象 接触关系的 关联对象。
当我们将一个员工从该部门删除时,这个员工就成了孤儿,有时这个"孤儿"是无效数据,需要删除的。
当然 这个要根据实际的应用情况来确定是否要删除 孤儿 了。
all-delete-orphan:
执行与 all 相同的操作,还会删除 孤儿 数据。 这个才是 名副其实的 all 呢,涵盖了所有的操作。
====================================================================================================
inverse 指主从关系中, 两者关系反生变化时,要不要两者同时维护这个关系呢。
inverse = true,表示将维护关系的权利给了 从属 的一方,由 从属 的一方(就是 set 中的一方)来生成 update 语句维护两者间关系所发生的。
inverse = false,不讲控制权交给从属方,那么两方都会来维护这个关系。
casecade: 指 在对一方进行 操作时,是否将相同的操作应用到 关系 一方。
人 与 书, 对书做 增删改查 时,是否也级联操作 人 呢,要视情况而定哦 。
所以 casecade 的取值范围很多的。
inverse : 是一个 开关,表示主控方是否将 操作后对关系的影响 应用到 关系方, 其实就是 update 语句,用于维护关系。
cascade: 是 权限 ,表示 具体将什么样的操作 应用到 关系方。
使用情况:(inverse 只出现在 集合 属性中 set :one-to-many many-to-many)
一对一:
没有inverse属性,新增任何一方都会持久化其中的关系
一对多:
在多的一方设置 inverse 属性,casecade 默认为 none
多对一:
cacade 默认 none
多的这一方是 从 所以没有inverse 这一属性
多对多:
在其中一方设置 inverse = true ,不能两方都为 true 那样就危险了。 cascade 要配置
分享到:
相关推荐
“Differential Equations Inverse and Direct Problems”这一标题明确指出本书的主题聚焦于微分方程领域中的两个重要方面:逆问题(inverse problems)与正问题(direct problems)。微分方程作为数学分析的一个核心...
eter estimation and inverse problem philosophy and methodology, specifically regarding such key issues as uncertainty, ill-posedness, regularization, bias, and resolution. We emphasize theoretical ...
**标题:** "Inverse Problem Theory and Methods for Model Parameter Estimation"(反演问题理论与模型参数估计方法) 此书名表明了该书的核心内容是关于反演问题的理论及其在模型参数估计中的应用方法。反演问题...
### 知识点一:离散反问题的基本概念 **离散反问题**是指一类在数学建模过程中遇到的问题,这些问题通常与从观测数据中恢复未知源或过程有关。这类问题之所以被称为“反问题”,是因为它们是相对于正向(直接)问题...
在科学和工程领域中,参数估计与反问题(Parameter Estimation and Inverse Problems)是解决实际问题的重要工具之一。这类问题通常涉及未知参数或状态的确定,这些参数或状态无法直接测量,但可以通过观察到的数据...
在介绍分块对称矩阵的逆和行列式的过程中,通常涉及到矩阵理论和概率论的相关知识点,特别是当这些概念用于MCMC算法中的Gibbs采样时。MCMC(Markov Chain Monte Carlo)是计算机模拟技术的一个分支,主要用于计算...
逆合成孔径雷达(ISAR,Inverse Synthetic Aperture Radar)是一种能够生成目标高分辨率图像的技术,广泛应用于军事、航空以及海洋监控等领域。ISARLAB是一款由澳大利亚国防科学技术组织(DSTO)开发的计算机程序,...
《参数估计与反问题》是一本深入探讨这两个关键领域的重要著作。参数估计是统计学中的一个核心概念,涉及从观测数据中推断未知参数的过程。反问题是数学、物理学、工程学以及地球科学等多个领域的交叉学科,它关注的...
在Hibernate这个强大的对象关系映射(ORM)框架中,`inverse`属性是一个非常重要的概念,它主要用于管理关联关系的维护责任。在这个例子中,我们将会深入理解`inverse`属性的作用,并通过一个简单的测试案例——`...
### 统计与计算反问题 #### 知识点一:反问题的基本概念 - **定义**:反问题是指从观察到的数据出发,反向推断出未知的模型参数或状态的问题。它与正问题(从已知模型出发预测结果)相对。 - **重要性**:在众多...
"NHibernate Inverse & Cascade"是两个关键概念,对于理解和有效使用NHibernate至关重要。 **Inverse属性** Inverse属性主要用于控制NHibernate如何处理关联对象的持久化。在一对多或多对一的关系中,当一个实体...
在IT行业中,尤其是在Java开发或者使用ORM框架(如Hibernate)时,“inverse=true”是一个非常重要的概念,它涉及到对象关系映射中的数据管理策略。本文将深入解析“inverse=true”的含义,以及它在实际应用中的作用...
在这个主题中,我们关注的是一个使用C语言实现的反插值程序,名为"inverse",它似乎对常规的反插值方法进行了优化,加入了正则化处理,以提高计算效果。 首先,让我们理解什么是反插值。在插值中,我们通常有一个...
在Hibernate中,`Inverse`是一个重要的概念,它涉及到实体之间的关联管理。本文将深入探讨`Inverse`属性,以及它在Hibernate中的作用和应用场景。 一、Hibernate与对象关系映射 Hibernate通过ORM机制将Java对象与...
### Hibernate Inverse 和 Cascade 的详细讲解 #### 一、引言 在ORM(Object-Relational Mapping)领域,Hibernate作为一款流行的Java持久层框架,它提供了丰富的API和配置选项来帮助开发者实现对象与数据库表之间...