6

我正在尝试使用 Hibernate 注释。当我尝试使用 Cascading 时,我在 Eclipse智能感知中获得了两个选项:

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

在 hibernate CascadeType中,提供了比 JPA 中的许多选项。

一个比另一个有优势吗?

4

1 回答 1

9

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 将执行以下检查

…</p>

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

于 2012-09-22T17:38:27.637 回答