我正在使用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实现中的错误?
提前谢谢了。
此行为记录在11.11中。传递持久性。
hibernate级联类型对应于各个操作,因此您需要全部三个。
在大多数情况下,您CascadeType.ALL根本不需要级联。在那种情况下,JPA注释就足够了,因为JPA也CascadeType.ALL涵盖了所有Hibernate操作。否则,如果需要细粒度的级联控件(并使用Hibernate的Session界面),则需要Hibernate的@Cascade。
CascadeType.ALL
Session
@Cascade
这不是JPA实施中的错误,因为如果您使用JPA,EntityManager一切都会很好。仅当您将JPA批注与Hibernate的Session界面结合使用时,才会存在此问题。
EntityManager