• hibernate中cascade和inverse


    这两个属性都用于一多对或者多对多的关系中。

    而inverse特别是用于双向关系,在单向关系中我们并不须要。

     
    Cascade代表是否运行级联操作,Inverse代表是否由己方维护关系。
     
    Cascade:
     
    Cascade属性的可能值有
        all: 全部情况下均进行关联操作,即save-update和delete。

        none: 全部情况下均不进行关联操作。

    这是默认值。

        save-update: 在运行save/update/saveOrUpdate时进行关联操作。

        delete: 在运行delete 时进行关联操作。
        all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点。比方在一个一对多的关系中。Student包括多个book。当在对象关系中删除一个book时,此book即成为孤儿节点。

     
    Inverse:
     
    Inverse属性的可能值是true或者false。默觉得false:
     
         false代表由己方来维护关系,true代表由对方来维护关系。

    在一个关系中,仅仅能由一方来维护关系。否则会出问题(解疑中会讲到)。同一时候也必须由一方来维护关系。否则会出现两方互相推卸责任,谁也无论。

     
    1、cascade(级联)
       引用了《深入浅出 Hibernate》:级联(cascade)在Hibernate映射关系中。它指的是当主控方运行操作时,关联对象(被动方)是否同步运行同一操作,如主控方对象调用save-update或delete 方法时。是否同事对关联对象(被动方)进行save-update或delete。

      这里所说的主控方按我理解指的是:比方,User 类中有一Address属性。User和Address 是一对多的关系,然后当user.save(address);的时候,user就是主控方了。
     
    2、inverse(控制方向反转)
       引用了《深入浅出 Hibernate》:在Hibernate 语义中,inverse指定了关联关系中的方向。关联关系中,inverse=false 的为主动方,由主动方负责维护关联关系。

       这里所说的关联关系按我理解指的是:为了维持两个实体类(表)的关系。而加入的一些属性,该属性可能在两个实体类(表)或者在一个独立的表里面,这个要看这两方直接的相应关系了:
    ps:这里的维护指的是当主控放进行增删改查操作时,会同一时候对关联关系进行相应的更新。
       一对多:该属性在多的一方。应该在一方的设置 inverse=true 。多的一方设置 inverse=false(多的一方也能够不设置inverse属性。由于默认值是false),这说明关联关系由多的一方来维护。原因:该关联关系的属性在多的一方的表中。在维护关联关系的时候在多的一方easy维护。
       多对多:属性在独立表中。

    在随意一方设置inverse=true,还有一方inverse=false;原因:假设两个多设置为true 的话。表示两方都对关联关系表(独立表)进行了相同的维护,事实上仅仅要一方维护即可了,效率上来说,这样设置是合理点的。

       一对一:事实上是一对多的一个特例,inverse 的设置也是一样的。主要还是看关联关系的属性在哪一方,这一方的inverse=false。

       多对一:也就是一对多的反过来,没什么差别。
  • 相关阅读:
    Python面向对象编程——什么是面向对象的程序设计
    Python面向对象编程——基本语法
    Python面向对象编程——简介
    Python函数编程——迭代器
    Python函数编程——列表生成式和生成器
    Python函数编程——闭包和装饰器
    Python函数编程——名称空间
    开始写游戏 --- 第二十七篇
    开始写游戏 --- 第二十六篇
    开始写游戏 --- 第二十五篇
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/9926033.html
Copyright © 2020-2023  润新知