代码之家  ›  专栏  ›  技术社区  ›  Chandra Sekhar

在hibernate中cascade和inverse有什么区别,它们是用来做什么的?

  •  39
  • Chandra Sekhar  · 技术社区  · 16 年前

    如何在hibernate中使用cascade和inverse? 定义它们的程序/标签是什么?

    3 回复  |  直到 10 年前
        1
  •  90
  •   Irene Papakonstantinou    14 年前

    对于通过中间表的多对多关系,“Cascade”表示是否在子表中创建/更新记录。而“逆”表示是否在中间表中创建/更新记录

    e、 g.假设以下情况 一个学生可以有多部手机。所以学生班有一套手机的属性。 同时,一部手机可供多个学生使用。所以电话类对一组学生有属性。 这个映射在stud\u phone表中提到。

    所以有三张桌子。学生、电话和学生电话(中介)表。 映射可能如下所示:

    <set name="phoneset" table="stud_phone" cascade="save-update" inverse="true">
      <key column="mapping_stud_id">< /key>
      <many-to-many class="com.domain.Phone" column="mapping_phon_id"/>
    </set> 
    

    session.save(student_obj) 被称为。 根据“cascade”和“inverse”设置,将触发不同的查询。

    1) CASCADE为NONE,INVERSE为false

    Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
    Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
    Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
    

    2) CASCADE为NONE,INVERSE为true

    Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
    

    Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
    Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
    Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
    Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
    Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
    

    4) CASCADE是save update和INVERSE true

    Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
    Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
    Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
    

    所以在两个实体的关系中,“级联”影响其他实体表,“逆”影响中间表。所以它们的作用是独立的。

        2
  •  27
  •   dildeepak    9 年前

    引用的信息 Different between cascade and inverse 链接:

    1反向: 管理关系(插入或删除) 更新外键列)。

    2层叠: 在cascade中,一个操作(保存、更新和删除)之后 和删除) 彼此有关系。

    简言之,反之亦然 决定哪一方将更新 外键,而“cascade”决定 接下来的操作应该是什么 执行。两者看起来很相似 不同的东西。休眠开发人员 值得花时间研究 他们的应用。

    同时检查此论坛主题: https://forum.hibernate.org/viewtopic.php?f=1&t=949041

        3
  •  7
  •   user1134181 user1134181    8 年前

    这些是正交的概念。

    在关联中,必须使用 inverse 属性或 mappedBy many 侧入 one-to-many many-to-one 联合和任何一方 many-to-many 面向对象关联 关系联想 ).

    级联呢?您可以显式指定Hibernate对关联实体执行操作:

    • CascadeType.PERSIST save() 或 persist() 方法,同时保存所有关联实体;
    • CascadeType.REMOVE delete() 方法,同时删除所有关联实体;
    • CascadeType.MERGE merge()
    • CascadeType.REFRESH -当 refresh()
    • CascadeType.DETACH -当与此实体关联的会话关闭时,所有相关实体将处于分离状态;
    • CascadeType.ALL
    • “孤立删除”-从关系中删除关联实体时,从数据库中删除该实体。
    推荐文章