`

[收藏]到底在哪用inverse="ture"?

阅读更多

到底在哪用inverse="ture"?

inverse属性默认是false的,就是说关系的两端都来维护关系

 

这个意思就是说,如有一个Student, Teacher和TeacherStudent表,Student和Teacher是多对多关系,这个关系由TeacherStudent这个表来表现。

 

那么什么时候插入或删除TeacherStudent表中的记录来维护关系呢?在用hibernate时,我们不会显示的对 TeacherStudent表做操作。对TeacherStudent的操作是hibernate帮我们做的。hibernate就是看hbm文件中指 定的是"谁"维护关系,那个在插入或删除"谁"时,就会处发对关系表的操作。前提是"谁"这个对象已经知道这个关系了,就是说关系另一头的对象已经set 或是add到"谁"这个对象里来了。前面说过inverse默认是false,就是关系的两端都维护关系,对其中任一个操作都会处发对表系表的操作。

 

当在关系的一头,如Student中的bag或set中用了inverse="true"时,那就代表关系是由另一关维护的(Teacher) 。就是说当这插 入Student时,不会操作TeacherStudent表,即使Student已经知道了关系。只有当Teacher插入或删除时才会处发对关系表的 操作。

所以,当关系的两头都用inverse="true"是不对的,就会导致任何操作都不处发对关系表的操作

当两端都是 inverse="false"或是default值是,在代码对关系显示的维护也是不对的,会导致在关系表中插入两次关系。

 

 

在多对多中,在哪端inverse="true"效果差不多(在效率上)。

 

在一对多关系中inverse就更有意义了。

 

在一对多中,如果要一方维护关系,就会使在插入或是删除"一"方时去update"多"方的每一个与这个"一"的对象有关系的对象。

 

而如果让" 多"方面维护关系时就不会有update操作,因为关系就是在多方的对象中的,直指插入或是删除多方对象就行了。当然这时也要遍历"多"方的每一个对象显示的操作修关系的变化体现到DB中。

 

不管怎样说,还是让"多"方维护关系更直观一些。

分享到:
评论

相关推荐

    inverse=true的总结

    在IT行业中,尤其是在Java开发或者使用ORM框架(如Hibernate)时,“inverse=true”是一个非常重要的概念,它涉及到对象关系映射中的数据管理策略。本文将深入解析“inverse=true”的含义,以及它在实际应用中的作用...

    NHibernate Inverse & Cascade

    在.NET开发领域,NHibernate是一个广泛使用的对象关系映射(ORM)框架,它允许开发者将数据库操作转换为...在实际开发中,需要结合具体场景来决定何时使用`inverse="true"`和哪种`cascade`策略,以达到最佳的ORM效果。

    inverse 例子

    在Hibernate这个强大的对象关系映射(ORM)框架中,`inverse`属性是一个非常重要的概念,它主要用于管理关联关系的维护责任。在这个例子中,我们将会深入理解`inverse`属性的作用,并通过一个简单的测试案例——`...

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

    `inverse`属性是Hibernate中用于控制关联维护权的重要参数,它的主要作用在于确定关联关系的更新和删除操作由哪一方负责。默认情况下,关联的维护权在"多"端,即子实体,这意味着当子实体发生变化时,如增加、删除或...

    hibernate inverse 个人总结.doc

    然而,使用`inverse=true`需要谨慎,因为它可能会导致数据一致性问题,尤其是在多线程环境中,如果两个线程同时修改同一组关联对象,可能会出现预期之外的结果。 总结来说,`inverse`属性是Hibernate一对多关联中的...

    Hinton在NIPS2017上关于capsules的演讲PPT:Does the Brain do Inverse Graphics?

    在NIPS 2017会议上,Geoffrey Hinton发表了一篇题为“Does the Brain do Inverse Graphics?”的演讲,该演讲主要探讨了人类视觉和capsules这两个核心主题。本文将从以下几个方面详细解释这一主题中所涉及的知识点。...

    彻底明白Hibernate中的Inverse

    `Inverse`属性主要用在双向关联中,用于指定哪个关联端负责管理关联关系的维护。默认情况下,双向关联的两端都是“负责端”,即两者都会在持久化操作时更新关联。但这样可能会导致数据冗余和一致性问题。 五、`...

    hibernate inverse和cascade的详细讲解

    对于`one-to-one`和`many-to-one`关系,它们仅包含单个对象的引用,因此不需要使用`inverse`。 - **Inverse 的值** - **默认值**:`inverse`的默认值为`false`,表示对集合对象的修改会被反映到数据库中。 - **`...

    MVC映射inverse

    在Java的ORM框架如Hibernate中,`inverse`属性是一个关键的概念,主要用于管理一对多或多对一关联关系的主键维护。在这个例子中,我们讨论的是`inverse`在一对多双向关联关系中的应用,涉及两个实体类:`Student`和`...

    inverse_c语言inverse_inverse在C_cinverse_c语言longinverse_反插值_

    在这个主题中,我们关注的是一个使用C语言实现的反插值程序,名为"inverse",它似乎对常规的反插值方法进行了优化,加入了正则化处理,以提高计算效果。 首先,让我们理解什么是反插值。在插值中,我们通常有一个...

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

    在Hibernate中,`inverse`属性主要用于多对一或一对多的关系中,用于指定哪一方负责维护关系。当两个实体之间存在关联时,如果一方的集合变更,那么另一方的实体可能也需要更新。这时,`inverse`属性就变得尤为重要...

    inverse和cascade使用阐述

    在IT领域,"inverse"和"cascade"是两个常见的概念,尤其在数据库设计、软件工程以及数据处理中。这两个术语通常与关系型数据库中的外键约束、对象关系映射(ORM)工具,以及某些编程框架的特性相关。下面将详细阐述这...

    关于cascade和inverse属性[文].pdf

    在软件网络技术领域,尤其是在使用Hibernate这种对象关系映射(ORM)框架时,理解和正确使用`cascade`和`inverse`属性至关重要。这两个属性主要用于管理对象之间的关联关系,特别是如何在数据库中维护这些关系。 ...

    table表格排序

    inverse = false; th.click(function(){ table.find('td').filter(function(){ return $(this).index() === thIndex; }).sortElements(function(a, b){ return parseFloat($.text([a])) > parseFloat($.text...

    IND Inverse - MetaTrader 4脚本.zip

    在实际应用中,使用 IND Inverse Indicator 时,交易者需要将其安装到 MT4 平台上。这通常包括将 .mq4 文件复制到平台的 "Experts/Indicators" 目录下,然后在图表上选择 "Insert > Indicators > User Files" 来加载...

    Hibernate中cascade和inverse应用

    - `inverse` 则关注的是关系的维护,它决定了关联关系的哪一侧负责在数据库中创建或删除关系记录。 理解这两个属性的区别很重要,因为他们共同决定了数据的完整性和一致性。不恰当的设置可能会导致数据丢失或冗余。...

    关联映射cascade,inverse讲解

    在提供的示例代码中,你将看到如何配置和使用这些特性。通过阅读和实践这些代码,你可以更深入地理解Hibernate的关联映射,掌握cascade和inverse的实际应用技巧。 总之,理解并熟练运用Hibernate的关联映射、...

Global site tag (gtag.js) - Google Analytics