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

JPA orphanRemoval = true与ON DELETE CASCADE DML子句有何不同

郗欣嘉
2023-03-14
问题内容

我对JPA 2.0 orphanRemoval属性有些困惑。

我想我可以看到,当我使用JPA提供程序的数据库生成工具来创建基础数据库DDL以使其具有ON DELETE CASCADE特定关系时,这是必需的。

但是,如果数据库存在并且已经具有ON DELETE CASCADEon关系,这是否不足以适当地级联删除?orphanRemoval另外还做什么?

干杯


问题答案:

orphanRemoval与无关ON DELETE CASCADE

orphanRemoval是一个完全 ORM特定的东西
。当不再从“父”实体中引用“子”实体时,例如,当您从父实体的相应集合中删除子实体时,它会将“子”实体标记为要删除。

ON DELETE CASCADE特定数据库的事物 ,当删除“父”行时,它将删除数据库中的“子”行。



 类似资料:
  • 问题内容: 有什么区别,每个应该有什么区别? 如果我正确理解该理论,则查询优化器应该可以互换使用。 问题答案: 它们不是同一件事。 考虑以下查询: 和 第一个将返回订单及其订单号的行(如果有)。第二个将返回所有订单,但只有订单将具有与之关联的任何行。 使用,子句 实际上是 等效的。但是,仅仅因为它们在功能上相同而产生相同的结果,并不意味着这两种子句具有相同的语义。

  • 请看以下三个查询。我无法理解计算结果为TRUE的条件在附加到where子句时如何不返回行。我希望在第二个查询中得到User1,因为第一个查询显示条件的计算结果为TRUE。

  • 我可以通过两种方式来实现这一点,使用where子句或join查询,在spark SQL中哪个更快?为什么?Where子句比较列添加、选择那些记录还是在列本身上联接,哪个更好?

  • 问题内容: 使用BETWEEN子句或使用<= AND> =比较之间在性能上有区别吗? 即这两个查询: …和 在此示例中,year列是带有索引的VARCHAR2(4)。 问题答案: 这两个示例查询之间没有性能差异,因为这只是表示 包含 范围比较的一种简便方法。Oracle解析条件时,它将自动扩展为单独的比较子句: 前任。 …将自动变为:

  • C++20中有一个新的比较运算符。然而,我认为在大多数情况下,一个简单的减法效果很好: 它们的效果是一样的。我真的不明白这有什么区别。

  • 问题内容: 为简单起见,假设所有相关字段均为。 你可以做: 要不然: 这两个工作方式是否相同? 问题答案: 是您应该使用的ANSI语法。 通常认为它更具可读性,尤其是当您连接许多表时。 只要有需要,也可以轻松地将其替换为。 该语法更关系模型为主。 两个表ed的结果是表的笛卡尔积,将对其应用过滤器,该过滤器仅选择连接列匹配的那些行。 使用语法更容易看到这一点。 以您的示例为例,在MySQL(通常在S