我在一个项目上使用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注释中的某些级联类型。有人能让我直截了当吗?
答案 0 :(得分:4)
通常,在使用Hibernate时,您会发现许多这类重叠的例子。这可能有几个不同的原因。这可能是因为遗留原因(Hibernate在JPA标准化之前创建了注释),或者是因为Hibernate支持的功能比JPA标准允许的更多,或者因为它们的语义只有轻微的差别。
在这种情况下,当@Cascade
为标准时,Hibernate documentation非常清楚@OneToMany(cascade=...)
存在的原因。 Hibernate注释(@Cascade
)为您提供了比标准JPA注释更多的选项,并且它的语义也略有不同。
只要您不需要某些特殊的Hibernate功能/语义,就应该总是更喜欢使用标准的JPA注释。