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

Jim*_*son 9 java hibernate jpa

我在一个项目上使用Hibernate,我很困惑何时使用org.hibernate.annotations.CascadeType以及何时使用javax.persistence.CascadeType注释.

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

@OneToMany(fetch = FetchType.LAZY, cascade = javax.persistence.CascadeType.ALL)
Run Code Online (Sandbox Code Playgroud)

vs这样的事情:

@OneToMany(fetch = FetchType.LAZY)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
Run Code Online (Sandbox Code Playgroud)

我还读过,hibernate将忽略一对xxxx注释中的某些级联类型.有人能让我直截了当吗?

Ale*_*øld 4

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

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

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