inverse:默认false,即该端负责维护关系。只能用在一对多和多对多双向关联映射上。
若某端配成inverse=true,则关系会在彼端被维护,对本端实体类的操作不会触发关系的更新。
举个例子,user和role,通过many-to-many来配置两者的多对多关系;user实体类中设置inverse为true,role端设置inverse为false(即:用户与角色间的关系由role来维护);这样,当删除某个被分配了角色的用户的时候,用户被删除,但该用户在USER_ROLE表中所对应用户角色关系信息不会被删除(因为用户端不负责维护关系);
这样,在你再次在权限管理模块中查看某角色下的“用户列表”时,就有可能报“No row with the given identifier exists”异常。
那咋样可以即让关系在Role端维护,又在删除某个已被赋予角色的用户后,在查看角色下“用户列表”时不至于报“No row with the given identifier exists”异常那?答案是在inverse为false(负责维护关系)的Role端的many-to-many标签上使用not-found:
<set name="users" table="T_USER_ROLE_REAL_AB" lazy="false"
inverse="false" cascade="all">
<key>
<column name="ROLE_ID" not-null="true" />
</key>
<many-to-many class="com.ambow.hy.object.UserInfo" column="USER_ID"
outer-join="auto" not-found="ignore"/>
</set>
关于not-found:
取值有二:ignore、exception。
指定Action to do when an element is not found on a association whiel beeing expected。hibernate官方解释:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-306
引用
not-found="exception" is the current default behavior.
not-found="ignore" will mean that if we cannot find the object represented by the given id we will ignore it and return null.
this implies that the association cannot be lazy.
The option should work for one-to-many, many-to-one and many-to-many
分享到:
相关推荐
### Hibernate Inverse 和 Cascade 的详细讲解 #### 一、引言 在ORM(Object-Relational Mapping)领域,Hibernate作为一款流行的Java持久层框架,它提供了丰富的API和配置选项来帮助开发者实现对象与数据库表之间...
Hibernate中Inverse和Cascade的区别.html
Hibernate中cascade与inverse属性详解
在深入探讨Hibernate集合映射中的`inverse`与`cascade`属性之前,我们首先需要理解Hibernate框架的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供了一种将对象模型与数据库...
- **Cascade.PERSIST**:当父对象执行persist操作时,关联的子对象也会被persist。 - **Cascade.MERGE**:当父对象执行merge操作时,关联的子对象也会被merge。 - **Cascade.REMOVE**:当父对象执行remove操作时,...
双向关联关系的维护属性为`inverse`,级联操作属性为`cascade`,乐观锁通常通过`version`元素实现。 4. 主键生成策略: - 主键生成机制在`generator`元素中定义,常见的策略包括`increment`、`identity`、`...
在 Hibernate 框架中,`cascade` 和 `inverse` 是两个重要的概念,它们主要用于管理对象之间的持久化关系,特别是涉及到一对一(one-to-one)、一对多(one-to-many)和多对多(many-to-many)关系时。这两个属性都...
这些关联可以通过不同的策略来实现,比如`inverse`和`cascade`。 4. **事务管理**:Hibernate提供了两种事务管理方式:基于JDBC的事务管理和基于JTA(Java Transaction API)的事务管理。 5. **锁机制**:...
在使用了 Hibernate 的系统中,要想在删除某个客户数据的同时删除该客户对应的所有订单数据,可以配置客户和订单关联的 cascade 属性为 all。 7. 一对多关联配置 在一对多关联配置中,存在错误的是 inverse 属性不...
<set name="addresses" inverse="true" cascade="all"> <one-to-many class="com.example.Address"/> ``` 在`User`类中,我们需要定义一个Set类型的属性来对应这个集合: ```java public class User { // ......
在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...
在Java的持久化框架Hibernate中,级联操作(Cascade)和反转(Inverse)是两个重要的概念,它们主要用于管理对象关系模型中的关联关系。在一对多的关系中,这些特性可以帮助简化数据操作,提高代码的可读性和维护性...
<set name="orders" cascade="all-delete-orphan" inverse="true"> <one-to-many class="mypack.Order"/> ``` 这样,在运行时会执行: ```sql DELETE FROM ORDERS WHERE CUSTOMER_ID = 2 AND ID = 2; ```...
如果我们在ORM工具如Hibernate中定义这种关系,可以设置其中一个关联为“inverse”,表示这个关联的维护责任不在该端。换句话说,更新或删除部门时,相关的员工记录不会被自动更新或删除,反之亦然。这样可以避免...
本文将深入探讨Hibernate中的一对多关系,并重点解析`inverse`属性的作用及其应用。 一对多关系是数据库设计中常见的关联类型,例如一个用户可以拥有多个订单,一个班级可以包含多个学生等。在Hibernate中,通过...
<one-to-many name="students" class="com.example.Student" inverse="true"/> </hibernate-mapping> <!-- 注解方式 --> @Entity public class School { @Id @GeneratedValue(strategy = GenerationType....