JPA Cascade注释与Hibernate Cascade注释之间的区别

时间:2012-09-22 17:33:19

标签: java hibernate hibernate-annotations hibernate-cascade

我正在尝试使用Hibernate注释。当我尝试使用Cascading时,我在Eclipse intellisense 中得到两个选项:

    javax.persistence.CascadeType and org.hibernate.annotations.CascadeType

在hibernate CascadeType 中,给出了许多选项,而不是JPA的选项。

一个人有什么优势吗?

1 个答案:

答案 0 :(得分:8)

javax.persistence注释是标准规范。 hibernate注释代表了Hibernate的具体实现。它们大多重叠,但Hibernate CascadeType提供了一些特定于Hibernate的附加选项。

通常,尽可能使用javax.persistence注释。仅当您需要特定于Hibernate的选项之一时才使用Hibernate变体,并且知道您可能永远不需要切换到另一个持久性提供程序。

许多人在同一个项目中混合使用JPA / Hibernate注释,这是一个有效的事情。但是,可能存在一些微妙的交互,例如涉及CascadeType的那些:

http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/

  

查看代码,@ OneToMany来自JPA,它预计会有JPA级联 -   javax.persistence.CascadeType。但是当你用Hibernate保存它时   session,org.hibernate.engine.Cascade将执行以下检查

     

...

     

Hibernate保存过程将导致ACTION_SAVE_UPDATE操作,   但是JPA会传递一个ACTION_PERSIST和ACTION_MERGE,它不会   匹配并导致级联无法执行。