JPA和Hibernate级联之间的混淆

Gor*_*don 14 hibernate jpa cascade

我正在使用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实现中的错误?

提前谢谢了.

axt*_*avt 13

此行为记录在11.11中.传递性持久性.

  1. Hibernate级联类型对应于各个操作,因此您需要它们全部三个.

  2. 在大多数情况下,您需要CascadeType.ALL或根本不需要级联.在那种情况下,JPA注释就足够了,因为JPA也CascadeType.ALL涵盖了所有Hibernate操作.否则,如果你需要细粒度的级联控制(并使用Hibernate的Session接口),你需要Hibernate @Cascade.

  3. 这不是JPA实现中的错误,因为如果您使用JPA,EntityManager一切正常.只有将JPA注释与Hibernate的Session接口结合使用时,才会出现此问题.

  • @Jay:关键是当通过`EntityManager`访问时,Hibernate充当JPA实现,如果Hibernate通过`Session`访问它自己行动,尽管它仍然可以使用JPA注释. (2认同)