使用Hibernate和JPA级联类型,何时使用哪个以及在哪里使用

10

我正在一个项目中使用Hibernate,但我对于何时使用org.hibernate.annotations.CascadeType和javax.persistence.CascadeType注解感到非常困惑。

例如,我应该在什么情况下使用以下注解:

@OneToMany(fetch = FetchType.LAZY, cascade = javax.persistence.CascadeType.ALL)

与这个相比,使用 VS:

@OneToMany(fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)

我还看到过一些关于 hibernate 的级联类型的信息,关于其中与“one to xxxx”注解相关的级联类型会被忽略,这是正确的吗?请问有人可以解答一下吗?


抱歉!我脑子短路了,因为打开了太多的标签页 :) - Aleksander Blomskøld
1个回答

4
通常在使用Hibernate时,你会发现很多这种重叠的例子。可能有几个不同的原因导致这种情况。其中一种是由于遗留原因(Hibernate在JPA标准化之前创建了注释),或者是因为Hibernate支持的功能比JPA标准允许的更多,或者只是它们在语义上略有不同。
在这种情况下,Hibernate文档非常清楚,为什么在标准@OneToMany(cascade=...)存在的情况下还需要@Cascade。Hibernate注释(@Cascade)给你比标准JPA注释更多的选项,并且它也有稍微不同的语义。
只要不需要某些特殊的Hibernate功能/语义,你应该始终优先使用标准的JPA注解。

谢谢,看起来Hibernate注释将做与JPA注释完全相同的事情,因此首先使用它们,然后根据需要使用Hibernate注释进行补充。关于这里描述的不兼容性:http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/ - Jimmy Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接