JPA级联注释和Hibernate级联注释的区别

6

我在尝试使用Hibernate注解进行一些实践。当我尝试使用级联时,Eclipse智能提示会给出两个选项:

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

在Hibernate的CascadeType中,提供了比JPA更多的选项。

有没有一个优于另一个的优势?

1个回答

11
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,它们不匹配并导致级联无法执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接