`
米奈希尔
  • 浏览: 268703 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于Hibernate的inverse设置的一点理解

    博客分类:
  • SSH
阅读更多

inverse用于控制关联关系由哪一方维护,通常在1对n关联中由“n”的一方维护关联关系;在n-n关联中根据情况来指定关联一方。

我们以顾客(Customer)和订单(Order)这个例子来说,顾客和订单是1对n的关系,通常我们会这样配置映射文件:

 

Customer.hbm.xml片段

<set name="orders" inverse="true">
    <key column="customer_id" />
    <one-to-many class="Order" />
</set>

Order.hbm.xml片段

<many-to-one name="customer" column="customer_id" class="Customer">

 

这样在数据库中,Order表通过引用Customer表的customer_id列作为外键而关联起来。

 

相信这不是很难理解,但这里有几个问题需要回答:

 

1. 设置inverse=true的含义是什么?

inverse设置为true,说明关联关系由相反的一方维护,在上面的例子中就是由Order对象来维护。

 

2. 为什么通常让n的一方维护关联关系呢?

让我们想想如果让1的一方来维护会怎样把。还以上面为例,这时是由Customer来维护关系,如果没有设定级联保存的话,维护一个Customer-Order关系,Hibernate需要3条SQL语句:

a. 插入一个Order记录;

b. 插入一条Customer记录;

c. 更新Order记录的customer_id字段;

之所以多出一条的原因是,Order并不维护关系,因此它的customer_id需要另外一条SQL来更新。

另一个原因是,由n的一方维护关系,似乎更直观。

ps:如果指定了外键列不能为空(Order表中customer_id not null),那么就只能由n的一方来维护了。

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    彻底明白Hibernate中的Inverse

    总结来说,理解并合理运用Hibernate中的`Inverse`属性对于优化数据操作、提高代码可读性和维护性具有重要意义。通过精确控制关联的维护责任,我们可以更好地管理对象关系,实现高效且一致的数据库操作。

    hibernate inverse 个人总结.doc

    在探讨Hibernate的`inverse`属性之前,我们先要理解Hibernate中的对象关系映射(ORM)以及持久化机制。Hibernate是一个流行的Java ORM框架,它允许开发者将数据库操作转换为面向对象的编程模型,使得数据操作更加...

    hibernate inverse和cascade的详细讲解

    ### Hibernate Inverse 和 Cascade 的详细讲解 #### 一、引言 在ORM(Object-Relational Mapping)领域,Hibernate作为一款流行的Java持久层框架,它提供了丰富的API和配置选项来帮助开发者实现对象与数据库表之间...

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

    6. **最佳实践**:在实际开发中,应根据业务逻辑合理设置`inverse`,避免过度依赖`inverse="true"`,因为它可能导致代码难以理解和维护。同时,确保理解`inverse`和`cascade`的组合使用,以防止意外的数据修改。 综...

    Hibernate中cascade与inverse属性详解

    Hibernate中cascade与inverse属性详解

    Hibernate_级联关系说明_-_关于cascade和inverse的用法

    在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...

    Hibernate中Inverse和Cascade的区别.html

    Hibernate中Inverse和Cascade的区别.html

    Hibernate中cascade和inverse应用

    如果在 `Course` 的集合属性(如 `Set&lt;Course&gt;`) 上设置 `inverse="true"`,那么添加或删除 `Course` 时,Hibernate 不会在 `TeacherCourse` 表中插入或删除记录。只有当在 `Teacher` 对象上进行添加或删除操作时,...

    hibernate 级联(cascade和inverse)一对多

    在Java的持久化框架Hibernate中,级联操作(Cascade)和反转(Inverse)是两个重要的概念,它们主要用于管理对象关系模型中的关联关系。在一对多的关系中,这些特性可以帮助简化数据操作,提高代码的可读性和维护性...

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

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

    Hibernate 简单 PPT 总结

    这些资料构成了一套完整的Hibernate学习路径,从基础到高级,从配置到实践,对于理解Hibernate的核心机制和提升开发技能都非常有帮助。通过阅读和研究这些内容,开发者可以更熟练地运用Hibernate进行数据库操作,...

    hibernate常用注解

    ### Hibernate常用注解详解 #### 一、JPA与Hibernate注解基础 JPA(Java Persistence API)是一种标准规范,用于实现对象关系映射(ORM),允许...理解和熟练掌握这些注解对于使用Hibernate进行持久化操作至关重要。

    inverse=true的总结

    `inverse`属性是Hibernate框架中的一个关键设置,它用于控制一对多(One-to-Many)或一对一(One-to-One)关联关系的维护责任。在Hibernate中,当两个实体之间存在关联关系时,通常需要指定一方来负责维护这个关联,...

    inverse 例子

    在一对多关系中,如果在多方(ManyToOne)的一端设置了`inverse="true"`,那么Hibernate将不再在多方对象保存或更新时处理关联。相反,它会交给一对一或一对多的那端去处理。这样做可以优化性能,避免不必要的数据库...

    hibernate的联合主键怎么设置

    在 Hibernate 中设置联合主键通常需要以下几个步骤: 1. **创建主键类**: 首先,你需要创建一个类来表示联合主键,这个类需要包含所有组成主键的属性。在这个例子中,类名为 `SCMapping`,包含 `sno`(学号)和 `...

    hibernate

    根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...

Global site tag (gtag.js) - Google Analytics