Hibernate和JPA级联类型何时使用哪一个和哪里

时间:2012-12-28 07:31:49

标签: java hibernate jpa

我在一个项目上使用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会忽略某些xxxx注释中的某些级联类型。有人能让我直截了当吗?

1 个答案:

答案 0 :(得分:4)

通常,在使用Hibernate时,您会发现许多这类重叠的例子。这可能有几个不同的原因。这可能是因为遗留原因(Hibernate在JPA标准化之前创建了注释),或者是因为Hibernate支持的功能比JPA标准允许的更多,或者因为它们的语义只有轻微的差别。

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

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