【问题标题】:What's the difference between @CascadeOnDelete and CascadeType.REMOVE annotations?@CascadeOnDelete 和 CascadeType.REMOVE 注释有什么区别?
【发布时间】:2012-11-10 12:59:37
【问题描述】:

起初我希望使用CascadeType.REMOVE 可以删除表中的外键,但我还是遇到了一个例外。但是使用@CascadeOnDelete 就可以了。这两个注释有什么区别?

编辑:我看到了 DataNucleus 的评论。删除时的级联来自 org.eclipse.persistence.annotations.CascadeOnDelete。这就提出了如何使用好主意的问题。

【问题讨论】:

  • @CascadeOnDelete 不是 JPA 的一部分,所以建议您提及它的来源
  • 例外是:DELETE on table 'XXX' caused a violation of foreign key constraint 'YYY' for key (xxx). The statement has been rolled back.

标签: java sql jpa eclipselink


【解决方案1】:

当您使用 CascadeType.Remove 时,级联将由 ORM 工具处理,但当您希望由数据库处理级联时,您可以使用 @CascadeOnDelete.但是当您使用 @CascadeOnDelete 时,请确保您使用的数据库应该支持级联。

【讨论】:

  • 这取决于您如何使用它。如果您希望您的代码严格符合 JPA 规范,那么您不应该使用 CascadeOnDelete。但是如果您确定如果不会更改您的 JPA 提供程序,那么使用 CascadeonDelete 可能很有用。更多信息可以参考link
  • 我也认为 CascadeOnDelete 应该表现得更好,因为 CascadeType.ALL 会触发数百个查询来删除每个条目,而 CascadeOnDelete 只会发生一个查询。
猜你喜欢
  • 2013-09-19
  • 2022-01-21
  • 2019-01-25
  • 1970-01-01
  • 2018-11-23
  • 2018-01-14
  • 2013-07-07
  • 2016-09-16
  • 2014-06-27
相关资源
最近更新 更多