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

休眠中级联与逆之间有什么区别,它们分别用于什么用途?

江礼骞
2023-03-14
问题内容

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


问题答案:

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

例如,假设在方案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>

将创建一个新的Student对象,并将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是关系的所有者,因此,即使创建了一个新学生,中介表也不会更新。

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



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

  • 问题内容: 两者之间有什么明显的区别 和 问题答案: 它们仅在处理空值时有明显的区别。 这是因为是原始数据类型不能为其分配null,而它的包装器类 可以接受null。 因此,如果column可为空并且您用于 映射实体对象,则对于null 的记录, 将发生错误,因为 无法存储null。

  • 问题内容: MySQLDialect和MySQLInnoDBDialect有什么区别?从那时起我就一直使用MySQLDialect,现在我想知道上面有什么不同。 任何人? 问题答案: MySQL中的默认存储引擎是。如果您需要事务和行级锁定,则通常选择。 使用,Hibernate会追加到表创建语句。这将显式创建一个表。不附加引擎字符串,因此将创建一个表。 但是,您还可以通过在MySQL配置文件中使用

  • 问题内容: 在我的脑海中,我一直都知道在任何项目中都使用内联样式的类。但是两者之间有什么有效的区别吗? 问题答案: 有一个简单的原因。CSS的重点是将内容(HTML)与表示(CSS)分开。一切都与可访问性和代码重用有关。

  • 问题内容: 和处理特殊字符之间有什么区别? 被空间接受。 在的情况下,被接受为。 问题答案: 是要从URI(Spring称为URI模板)中获取一些占位符 也是要从URI中获取参数—请参见Spring Reference第16.3.3.3章,使用@RequestParam将请求参数绑定到方法参数 如果该网址在2013年12月5日获得了用户1234的发票,则控制器方法如下所示: 同样,请求参数可以是可

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