zoukankan      html  css  js  c++  java
  • 正确理解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建立多对多关系也是将他们分离成两个一对多关系,中间连接一个连接表。所以通用存在一对多的关系,也可以这样说:一对多是多对多的基本组成部分

  • 相关阅读:
    思科完成收买Pari Networks 增强智能办事
    天音控股拟与外企协作
    运营商竞速搭建手机支出公司
    C版iPhone 4入华期近 高性价比将引追逐
    诺基亚否认将中断塞班办事
    联通守旧国际遨游短信提醒
    思科宣布揭晓已完成收买Pari Networks的买卖
    各种“Phone”辈出 购置裸机或更划算
    台湾运营商看好中低端智能机加大推销量
    诺基亚Ovi商店开卖《水果忍者》
  • 原文地址:https://www.cnblogs.com/soundcode/p/1911935.html
Copyright © 2011-2022 走看看