当前位置: 首页 > 知识库问答 >
问题:

为什么JPA OneToOne(甚至OneToMany)的OphanRemove默认为false

吉和同
2023-03-14

为什么JPA OneToOne(甚至OneToMany)的OpharmanRemove默认为false

我的意思是,强制对已从关系中移除的实体执行移除操作,并在默认情况下将移除操作级联到这些实体,难道不是更好吗?

如果只使用默认值,当前默认为false的行为不会导致孤儿条目(可能会成为僵尸记录),从而导致数据库表随着时间的推移而膨胀吗?还是我错过了这里的东西?

谢谢

当从关系中移除一对一或一对多关系中的目标实体时,通常希望将移除操作级联到目标实体。这样的目标实体被认为是“孤儿”,可以使用orphanremove属性来指定应该删除孤儿实体。

共有1个答案

阚正真
2023-03-14

如果OphanRemove默认操作为true,则它将在用户不知道的情况下删除关联的表记录。大多数开发人员可能会忽略级联操作的默认行为,最终删除关联的表数据,这是很常见的。如果您已经删除了数据,并且没有办法拿回数据。想象在用户不知情的情况下删除数据有点可怕(在我看来)。

如果您忽略了orphanremove标志并将其保留为默认选项,则当前行为将允许您选择该选项。您可以选择清理孤儿记录或保持原样。清除孤立记录可以通过一个带有join子句的简单delete查询来完成。

在某些情况下,您可能需要孤立记录来追溯历史记录。例如-订单和产品信息。可以删除产品,但您不想删除关联的订单。

 类似资料:
  • 首先,我的声明是: 我的主要活动获取编号和文本: 我的Activity2应该得到数字和文本: 文本很受欢迎,但数值始终为0。

  • 问题内容: 当其他选项(例如或)看起来更合理时,将其设置为已编译默认值的原因是什么? 问题答案: 写这封信的那个家伙是一家瑞典公司的联席主管。 出于类似的原因,可能是Microsoft SQL Server的默认语言us_english。

  • 问题内容: 限制Java JVM上Permgen空间大小的目的是什么?为什么不总是将其设置为等于最大堆大小?Java为什么默认为这么少的64MB?他们是否正在试图通过这种方式迫使人们注意代码中的Permgen问题? 如果我的应用使用85MB的permgen,那么将其设置为96MB可能是安全的,但是如果它只是主堆的一部分,为什么还要设置得如此之小呢?允许JVM使用堆允许的PermGen效率不高吗?

  • 问题内容: 我正在尝试解析MySQL 文档。他们可能会更清楚。他们似乎在说的是,有五种可能性:SET NULL,NO ACTION,RESTRICT,CASCADE和SET DEFAULT。 NO ACTION和RESTRICT会执行相同的操作(防止破坏FK的任何数据库更改),并且该操作是默认操作,因此,如果省略ON DELETE子句,则表示NO ACTION(或RESTRICT -是相同的操作)

  • 大家好,Netbeans(像大多数IDE一样)使用点(.)组织小数点,对吗?我不知道为什么,但我的IDE开始使用逗号(,)来组织小数点。。。甚至控制台中显示的输出也使用逗号。如何将其更改回默认设置并再次开始使用小数点? PS:当我尝试使用点和小数位数(例如4.5)输入数字时,我会收到以下错误消息:

  • Java中的本质上是不可靠的。具体地说,我对接口的最大问题是,它需要一个不定义方法本身的方法行为。因此,如果遍历一个列表,您必须使用反射来访问它定义的行为。然而,在Java8中,我们现在有了默认方法,现在我问为什么在中没有默认的方法。 我理解为什么接口不能默认对象方法,但是,这是一个明确的设计决定,所以可以做出例外。 我有点想弃用并将其内部代码更改为类似以下内容: 然后继续使用使作为中的默认方法的