当前位置: 首页 > 面试题库 >

Hibernate中级联和逆之间有什么区别,它们分别用于什么用途?

景昊焜
2023-03-14
问题内容

如何在hibernate中使用级联和逆运算?定义它们的过程/标签是什么?它们彼此相关吗?它们如何有用?


问题答案:

在通过中介表进行多对多关系的情况下;“级联”表示是否在子表中创建/更新记录。而“反向”表示是否在中间表中创建/更新记录

例如,假设情况1下的学生可以拥有多部电话。因此,学生班级拥有“手机套”的属性。另外,一部电话可以由多个学生拥有。因此,“电话”类具有“学生组”的属性。stud_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)级联为无且逆为假

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

3)CASCADE为保存更新且INVERSE为假

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是保存更新的,并且是反向的

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为假(即Student是关系的所有者)时,中介表STUD_PHONE被更新。当inverse为true时,Phone是关系的所有者,因此,即使创建了一个新学生,中介表也不会更新。

因此,在两个实体有关系的情况下,“级联”会影响其他实体表,而“反向”会影响中间表。因此它们的效果是独立的。



 类似资料:
  • 问题内容: 如何在休眠中使用级联和逆运算?定义它们的过程/标签是什么?它们彼此相关吗?它们有什么用? 问题答案: 在通过中介表进行多对多关系的情况下;“级联”表示是否在子表中创建/更新记录。而“反向”表示是否在中间表中创建/更新记录 例如,假设在方案1下,一个学生可以拥有多部电话。因此,学生班级拥有“手机套”属性。另外,一部电话可以由多个学生拥有。因此,“电话”类具有“学生组”的属性。stud_p

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: 我对不同的Java框架感到非常困惑。我想创建一个Java服务器项目来提供一些Restful Web服务,但是我真的不知道我应该选择哪种框架。JSF,EJB,Hibernate和Spring有什么区别?请帮助我更多地了解它们。 问题答案: 这些是不同层的框架。 JSF 用于视图(Web)层,它是一个像Wicket或Tapestry这样的面向组件的框架(页面的每个部分都是一个组件,都有状态

  • 问题内容: 将一个使用在另一个上是否有好处?在Python 2中,它们似乎都返回相同的结果: 问题答案: 在将返回2.5并且将返回2。前者是浮点除法,后者是地板除法,有时也称为整数除法。 在或更高版本的2.x行中,除非执行,否则整数没有区别,这会使采取3.0的行为。 不管将来的进口是什么,都会归还,2.0因为这是操作的地板分割结果。

  • 问题内容: 单向关联和双向关联有什么区别? 由于在数据库中生成的表都是相同的,所以我发现的唯一区别是双向关联的每一侧都有一个引用,而单向则没有。 这是单向关联 双向关联 区别在于该组是否持有用户的参考。 所以我想知道这是否是唯一的区别?哪个推荐? 问题答案: 主要区别在于,双向关系提供了双向导航访问,因此您无需显式查询即可访问另一侧。此外,它还允许您在两个方向上应用级联选项。 请注意,导航访问并不

  • 我发现了两种不同的方法来在节点中对流进行管道处理。js 众所周知的流的方法 https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options 和流的独立功能 https://nodejs.org/api/stream.html#stream_stream_pipeline_streams_callback 我应该