gpt4 book ai didi

java - hibernate中的cascade和inverse有什么区别,它们是干什么用的?

转载 作者:IT老高 更新时间:2023-10-28 20:43:22 26 4
gpt4 key购买 nike

如何在hibernate中使用级联和逆向?定义它们的程序/标签是什么?它们是否相互关联?它们有什么用处?

最佳答案

如果是通过中间表的多对多关系; “级联”表示是否将在子表中创建/更新记录。而“逆”表示是否将在中间表中创建/更新记录

例如假设以下场景1 名学生可以拥有多部手机。所以学生类有一组电话的属性。1部电话也可以由多个学生拥有。所以 Phone 类具有一组学生的属性。stud_phone 表中提到了此映射。

所以有三个表,即。 Student、Phone 和 stud_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>

创建了一个新的学生对象,并将 2 个新的电话对象添加到其集合中。并且 session.save(student_obj) 被调用。根据“级联”和“反向”设置,将触发不同的查询。

以下是级联和逆向的不同组合及其影响。

1) CASCADE IS 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 为真

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

3) CASCADE 是 save-update 并且 INVERSE 是 false

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 (?, ?)

可以看出,只有在 CASCADE 保存更新时,PHONE 表中才会创建记录。否则不行。

当 INVERSE 为 false 时(即 Student 是关系的所有者),中间表 STUD_PHONE 被更新。当 inverse 为真时,Phone 是关系的所有者,因此即使创建了一个新学生,中间表也不会更新。

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

关于java - hibernate中的cascade和inverse有什么区别,它们是干什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com