JPA和Hibernate级联之间的混乱

我使用Hibernate 3.6,并且我的代码注释(而不是使用hibernate映射文件).我遇到了使用与Hibernate CascadeType不兼容的JPA级联选项的已知“问题”(有关详细信息,请参阅此链接http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/).

我希望对这个问题有更多的澄清.我有一些特别的问题:

1)所以@Cascade({CascadeType.SAVE_UPDATE})适用于saveOrUpdate(),但是如果我使用merge()还是persist(),它也适用?或者我必须使用所有三个Hibernate CascadeTypes?

2)如何决定是否使用JPA级联选项或Hibernate @Cascade注释?

2)在Hibernate中提到了一个“bug”,但是开发人员显然认为这是一个文档问题,(我完全不同意这一点),我没有看到在文档中已经解决了.任何人都知道为什么这是“设计工作”,而不是Hibernate的JPA实现中的错误?

提前谢谢了.

最佳答案
这个行为记录在11.11. Transitive persistence.

> Hibernate级联类型对应于各个操作,所以你需要三个.
>在大多数情况下,您需要CascadeType.ALL或根本没有级联.在这种情况下,JPA注释就足够了,因为JPA的CascadeType.ALL也涵盖了所有的Hibernate操作.否则,如果需要细粒度的级联控制(并使用Hibernate的Session界面),则需要使用Hibernate的@Cascade.
> JPA实现不是bug,因为如果使用JPA的EntityManager,一切都可以正常工作.只有将JPA注释与Hibernate的Session接口相结合,才会出现此问题.

转载注明原文:JPA和Hibernate级联之间的混乱 - 代码日志