一尘不染

JPA与Hibernate级联之间的混淆

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
CascadeType?

2)我该如何决定使用JPA级联选项还是使用Hibernate @Cascade注释呢?

2)在Hibernate中有一个针对此问题的“错误”,但是开发人员显然将此视为文档问题((我完全不同意)),并且我没有看到上述文档中已解决该问题。有谁知道为什么这是“按设计工作”而不是Hibernate的JPA实现中的错误?

提前谢谢了。


阅读 230

收藏
2020-06-20

共1个答案

一尘不染

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

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

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

  3. 这不是JPA实施中的错误,因为如果您使用JPA,EntityManager一切都会很好。仅当您将JPA批注与Hibernate的Session界面结合使用时,才会存在此问题。

2020-06-20