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

Ana*_*and 6 java hibernate hibernate-annotations hibernate-cascade

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

    javax.persistence.CascadeType and org.hibernate.annotations.CascadeType
Run Code Online (Sandbox Code Playgroud)

在休眠CascadeType中,给出了许多选项,而不是JPA的选项.

一个人有什么优势吗?

kal*_*ech 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会话保存它时,org.hibernate.engine.Cascade将执行以下检查

...

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