9

我在一个项目中使用 Hibernate,我对何时使用 org.hibernate.annotations.CascadeType 以及何时使用 javax.persistence.CascadeType 注释感到非常困惑。

例如,当我应该使用这样的东西时:

@OneToMany(fetch = FetchType.LAZY, cascade = javax.persistence.CascadeType.ALL)

与这样的东西:

@OneToMany(fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)

我还读过hibernate会忽略 one to xxxx 注释中的某些级联类型。有人可以让我直截了当吗?

4

1 回答 1

4

一般来说,在使用 Hibernate 时,您会发现许多此类重叠的示例。这可能有几个不同的原因。要么是因为遗留原因(Hibernate 在 JPA 中标准化之前创建了注释),要么是因为 Hibernate 支持的功能比 JPA 标准允许的功能多,或者是因为它们的语义略有不同。

在这种情况下,Hibernate 文档非常清楚为什么@Cascade存在@OneToMany(cascade=...)标准。Hibernate 注释 ( @Cascade) 为您提供了比标准 JPA 更多的选项,而且它的语义也略有不同。

只要您不需要某些特殊的 Hibernate 功能/语义,您就应该始终喜欢使用标准的 JPA 注释。

于 2012-12-28T07:38:42.747 回答