`
lj6684
  • 浏览: 964815 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Hibernate配置中inverse的作用

 
阅读更多

最近在使用Hibernate的时候,发现其中在管理对象间关系时有一个 inverse 属性,原来没太在意,仔细研究下发现这个属性还是比较关键的,详细解释一下

 

inverse属性一般是用在 1-N 对象关系中,默认值为 false

 

以 Parent,Child 这2个对象举例,从他们的关系上2者是 1-N 关系,PO对象描述通常为:

Parent 中包含一个属性 Set<Child> children

Child 中包含一个属性 Parent parent

 

Parent对应的hbm文件通常这样配置

 

 

<set property="children" cascade="all">
    <key column="parent_id"/>
    <ont-to-many class="Child"/>
</set>

 

这里,<set>标签中未配置 inverse 属性,其实代表 <set ... inverse="false">

说明 1-N 关系中,关系的建立由当前对象完成(也就是Parent负责)

在保存关联数据时需要将 Parent 作为主要操作目标,最后使用 session.save(parent) 来完成关联保存操作

 

 

Parent parent = ....;
Set<Child> children = ....;
parent.setChildren(children);

Transaction tx = session.beginTransaction();
// 注意这里要保存parent(主控对象)
session.save(parent);
tx.commit();
session.close();
 

如果设置为 <set ... inverse="true">,代表将对象关联关系的维护工作交给 N 端对象完成,那么按照以上方法使用 session 保存 parent 将会发现数据不完整,因为 inverse="true" 以后 parent 在保存和更新动作中不负责对关联关系进行维护(仅可关联查询),关系控制权现在交由 N 段 Child 对象,所以应该用 session 保存 Child;

 

 

Parent parent = ...;
Child child = ...;
child.setParent(parent);

Transaction tx = session.beginTransaction();
// 注意这里保存的对象应该是Child,因为关系控制权已经交给Many一端
session.save(child);
tx.commit();
session.close();

 

总结

简单来说,one-to-many 关系我们默认将 one 作为主控对象,many 作为附属属性,在默认情况下通过保存主控对象随带着完成附属属性的保存,并完成2者关系的建立(默认inverse="false"就是应对这种情况)

但如果根据业务需要,想以附属对象作为操作入口的话,就应该将 inverse 属性设置为 true

 

举个购物车的例子

用户和订单 是 one-to-many 的关系

订单和订单内的每条购买记录也是 one-to-many 的关系


从业务操作习惯上,用户执行下单时,应用实现习惯是保存“订单”对象,而不是保存“用户”对象

因此 用户-订单 关系的配置上就应该设置 inverse="true"


同样,在保存订单时要保存订单内每一条购买记录,应用实现习惯是保存“订单”对象,附带着把包括的购买记录也保存下来

因此 订单-记录 关系的配置上就应该设置 inverse="false"

分享到:
评论

相关推荐

    hibernate配置文件详解

    Hibernate 配置文件详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,用于简化 Java 应用程序中的数据库交互。 Hibernate 的配置文件是其核心组件之一,用于定义 Hibernate 的运行期参数。下面...

    hibernate集合映射inverse和cascade详解.txt

    在深入探讨Hibernate集合映射中的`inverse`与`cascade`属性之前,我们首先需要理解Hibernate框架的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供了一种将对象模型与数据库...

    Hibernate中cascade与inverse属性详解

    在 Hibernate 框架中,`cascade` 和 `inverse` 是两个非常重要的属性,它们用于管理对象之间的关联关系。...在实际开发中,需要根据业务需求灵活调整 `cascade` 和 `inverse` 的配置,以达到最佳的数据管理和性能优化。

    JavaEE学习笔记之Hibernate表关系之一对多(inverse详解)

    本文将深入探讨Hibernate中的一对多关系,并重点解析`inverse`属性的作用及其应用。 一对多关系是数据库设计中常见的关联类型,例如一个用户可以拥有多个订单,一个班级可以包含多个学生等。在Hibernate中,通过...

    hibernate inverse和cascade的详细讲解

    在这些配置选项中,`inverse`和`cascade`是最具挑战性的两个概念之一。它们主要用于控制对象之间关联关系的维护以及操作的级联行为。本文将详细介绍这两个属性的概念、作用以及应用场景,并通过示例来帮助读者更好地...

    hibernate 级联(cascade和inverse)一对多

    使用JUnit进行测试是验证Hibernate配置和功能的一种常见方法。你可以创建测试类,模拟数据的增删改查操作,然后检查数据库中的记录是否符合预期。例如,你可以创建一个父实体,添加一些子实体,并设置级联操作为`...

    hibernate配置要点详谈

    ### Hibernate配置要点详谈 #### 一、配置文件与配置方式 在Hibernate中,有两种主要的配置文件形式:`hibernate.cfg.xml` 和 `hibernate.properties`。 1. **`hibernate.cfg.xml`**: - 这种配置文件通常包含...

    Hibernate配置文件中映射元素详解

    【Hibernate配置文件中映射元素详解】 在对象关系映射(ORM)框架Hibernate中,对象与数据库表之间的关联是通过一个XML配置文件来定义的。这个XML文件包含了映射元素,用于描述Java类如何转化为数据库中的表。映射...

    对Hibernate配置文件中的映射元素详解

    在本文中,我们将深入探讨Hibernate配置文件中的映射元素,这些元素是将对象关系映射到数据库的关键部分。首先,我们需要了解映射文件的基本结构,它通常是一个XML文档,遵循特定的DTD(文档类型定义)。 `...

    hibernate关联映射的作用和常用属性解释

    为了更好地理解和运用Hibernate中的关联映射机制,我们需要深入了解其常用的属性及其作用。 ##### 1. `&lt;class&gt;`元素 - **`name`**:指定类的完整包名,如`com.example.Person`。 - **`table`**:对应数据库中的...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    常用 Hibernate 映射配置说明.doc

    `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库连接细节、默认的映射策略等。 - **schema**: 定义了数据库的Schema名称...

    Hibernate 配置详解 (二)

    ### Hibernate配置详解(二)——深入理解`.hbm.xml`文件与实体关联 #### 引言 在前文《Hibernate 配置详解》中,我们已经初步探讨了Hibernate框架的基本配置,包括`hibernate.cfg.xml`文件的重要性及其在...

    hibernate配置文件以及类映射文件常用写法1

    《Hibernate配置文件与类映射详解》 Hibernate作为一款强大的对象关系映射(ORM)框架,简化了Java应用与数据库之间的交互。本文将深入探讨Hibernate的配置文件和类映射文件的常用写法,帮助开发者更好地理解和应用...

    Hibernate 简单 PPT 总结

    "Inverse.png"可能是一个示例图,直观地展示了`inverse`属性在对象关系映射中的作用。 一系列PPT文件提供了关于Hibernate的深入学习材料: - "2018-7-27-Hibernate-检索方式.pptx"可能涵盖了Hibernate的多种检索...

    Hibernate关联关系配置

    #### 二、一对多关系的Hibernate配置示例 下面展示了一对多关系在Hibernate中的具体配置方式: **消费者类(Customer)的配置**: ```xml &lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD...

    Hibernate 多表映射关系配置

    以上就是 Hibernate 中的一对多、多对一和多对多关系的配置和使用方法。理解这些关系并正确配置它们是充分利用 Hibernate 框架的关键。在实际项目中,根据业务需求选择合适的关系映射方式,并灵活运用,能够简化...

    hibernate之一对多配置demo

    【hibernate之一对多配置demo】:在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本教程主要关注Hibernate中的一对多关系配置,并通过XML来实现,同时也涵盖了...

    hibernate配置笔记

    ### Hibernate配置详解与实践 #### 引言 Hibernate是一个开源的对象关系映射(ORM)框架,它能够将Java对象映射到关系型数据库中的表,从而简化了数据持久化层的开发工作。本文将深入探讨Hibernate配置的关键点,...

Global site tag (gtag.js) - Google Analytics