正确理解hibernate的inverse属性

简介:
1) inverse 中提及的side其实是指一个类或者表的概念,双向关联其实是指双方都可以取得对方的应用。 

2)维护关系这个名词还是稍显模糊或者晦涩。我们一般说A类或者A表(这里的表的是指多对多的连接表)有责任维护关系,其实这里的意思是说,我在应用在更新,创建,删除(读就不用说了,双向引用正是为了方便读而出现)A类或者A表时,此时创建的SQL语句必须有责任保证关系的正确修改。 

3) inverse=false 的side(side其实是指 inverse=false 所位于的class元素)端有责任维护关系,而 inverse=true 端无须维护这些关系。 

4)我们说inverse设立不当会导致性能低下,其实是说inverse设立不当,会产生多余重复的SQL语句甚至致使JDBC exception的throw。这是我们在建立实体类关系时必须需要关注的地方。一般来说,inverse=true是推荐使用,双向关联中双方都设置inverse=false的话,必会导致双方都重复更新同一个关系。但是如果双方都设立inverse=true的话,双方都不维护关系的更新,这也是不行的,好在一对多中的一端:many-to-one默认是inverse=false,避免了这种错误的产生。但是对多对就没有这个默认设置了,所以很多人经常在多对多的两端都使用inverse=true,结果导致连接表的数据根本没有记录,就是因为他们双分都没有责任维护关系。所以说,双向关联中最好的设置是一端为inverse=true,一端为inverse=false。一般inverse=false会放在多的一端,那么有人提问了,many-to-many两边都是多的,inverse到底放在哪儿?其实hibernate建立多对多关系也是将他们分离成两个一对多关系,中间连接一个连接表。所以通用存在一对多的关系,也可以这样说:一对多是多对多的基本组成部分



本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/20/1911935.html,如需转载请自行联系原作者

目录
相关文章
|
SQL Java 数据库连接
Hibernate【inverse和cascade属性】知识要点
Hibernate【inverse和cascade属性】知识要点
122 0
Hibernate【inverse和cascade属性】知识要点
|
缓存 Java 数据库连接
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
Hibernate一对多关联的两个关键属性cascade和inverse(十一)
|
Java 数据库连接 数据库
spring-boot工程中,jpa下hibernate的ddl-auto的各种属性
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80871845 jpa...
1050 0
|
Java 数据库连接 数据库
|
Java 数据库连接 容器
|
SQL Java 数据库连接
Hibernate的auto-import属性详解
auto-import是什么意思呢?  我们经常会写这样一个HQL语句: from User u where u.name='罗灿锋'; 绝大多数时候,这样写是不会发生问题的。 hibernate在处理这个HQL时,会先将其翻译成一条数据库能够识别的sql语句。
893 0
|
Java 数据库连接
hibernate CascadeType属性
CascadeType.PERSIST 只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态) ;              级联保存,当调用了Persist() 方法,会级联保存相应的数据 CascadeType.MERGE指A类新增或者变化,会级联B对象(新增或者变化) CascadeType.REMOVE只有A类删除时,会级联删除B类; CascadeType.ALL包含所有; CascadeType.REFRESH没用过。
772 0
|
SQL Java 数据库连接
|
Java 数据库连接 数据库
Hibernate Cascade 属性
1.在一对多的 set配置中 , inverse="true" 表示 反转,即由多方来控制。 2.在一对多的 set配置中, cascade="all" 表示 级联操作。 即 一方保存数据,会将所关联的多方的数据同时保存到数据库中。
|
Java 数据库连接
Hibernate Inverse属性
inverse属性: 在one方的一对多关联中设置inverse属性为true,则表示由多方来维护关联关系,这有助于性能的改善; 不设置该属性的话双方都会维护关联关系 eg: 响性能。