2012-12-28 46 views
8

我在項目上使用Hibernate時,我徹底困惑了何時使用org.hibernate.annotations.CascadeType以及何時使用javax.persistence.CascadeType註釋。休眠和JPA級聯類型何時使用哪一個和哪個

例如,當我應該使用這樣的事情:

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

VS是這樣的:

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

我也看過那Hibernate會忽略是在一個特定的級聯類型xxxx註釋。有人可以設置我嗎?

+0

對不起!當我有太多的標籤打開時,我的腦子發生了故障:) –

回答

4

一般來說,在使用Hibernate時你會發現很多這類重疊的例子。這可能有幾個不同的原因。要麼是因爲遺留原因(Hibernate在JPA中標準化之前創建了註釋),要麼是因爲Hibernate支持比JPA標準允許的功能更多的功能,或者是因爲它們在語義上只略有不同。

在這種情況下,Hibernate documentation非常清楚爲什麼@Cascade存在@OneToMany(cascade=...)是標準。 Hibernate註釋(@Cascade)爲您提供了比標準JPA更多的選項,並且它也具有稍微不同的語義。

只要你不需要一些特殊的Hibernate特性/語義,你應該總是喜歡使用標準的JPA註釋。

+0

非常感謝,因此看起來Hibernate標註與JPA標註完全相同,所以先使用這些註釋,然後在需要時使用Hibernate標註進行補充。這裏描述的不兼容性如何:http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/ –