Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';@CascadeOnDelete和CascadeType.REMOVE注释之间的区别是什么?_Java_Sql_Jpa_Eclipselink - Fatal编程技术网

Java 什么';@CascadeOnDelete和CascadeType.REMOVE注释之间的区别是什么?

Java 什么';@CascadeOnDelete和CascadeType.REMOVE注释之间的区别是什么?,java,sql,jpa,eclipselink,Java,Sql,Jpa,Eclipselink,起初,我希望使用CascadeType.REMOVE可以删除表中的外键,但我遇到了一个异常。但是使用@CascadeOnDelete就可以了。这两个注释之间有什么区别 编辑:我看到了DataNucleus的评论。Cascade on delete来自org.eclipse.persistence.annotations.Cascade OnDelete。这就提出了一个问题,即使用CascadeType时该方法有多好。当您使用CascadeType时,请在ORM工具处理级联时删除,但当您希望由数据

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


编辑:我看到了DataNucleus的评论。Cascade on delete来自
org.eclipse.persistence.annotations.Cascade OnDelete
。这就提出了一个问题,即使用CascadeType时该方法有多好。

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

@CascadeOnDelete不是JPA的一部分,因此建议您提及它的来源异常是:
表“XXX”上的删除导致键(XXX)违反外键约束“YYY”。该语句已回滚。
这取决于您如何使用它。如果您希望您的代码严格符合JPA规范,则不应使用CascadeOnDelete。但如果您确定如果不会更改您的JPA提供程序,则使用CascadeOnDelete可能很有用。有关更多信息,您可以参考,我还认为CascadeOnDelete的性能应该更好,因为CascadeType.ALL将触发数百个查询来删除每个条目,而CascadeOnDelete只会发生一个查询。