2012-12-28 7 views
8

Sto utilizzando Hibernate su un progetto e sono completamente confuso su quando utilizzare org.hibernate.annotations.CascadeType e quando utilizzare le annotazioni javax.persistence.CascadeType.Tipi di cascata Hibernate e JPA quando utilizzare quale e dove

Per esempio quando dovrei usare qualcosa di simile:

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

vs qualcosa di simile:

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

Ho anche letto che Hibernate ignorare certi tipi cascata che si trovano in quella di annotazioni xxxx. Qualcuno può dirmi dritto?

+0

Siamo spiacenti! Il mio cervello ha funzionato male mentre stavo avendo troppe schede aperte :) –

risposta

4

In generale, durante l'uso di Hibernate sono presenti numerosi esempi di questo tipo di sovrapposizione. Ci possono essere diverse ragioni per questo. O è per motivi di legacy (Hibernate ha creato l'annotazione prima che venisse standardizzata in JPA), o perché Hibernate supporta più funzionalità di quanto lo standard JPA lo consenta, o perché differiscono leggermente nella loro semantica.

In questo caso, il Hibernate documentation è molto chiaro perchéesiste quando @OneToMany(cascade=...) è lo standard. L'annotazione Hibernate (@Cascade) offre molte più opzioni rispetto a quella standard di JPA e ha anche una semantica leggermente diversa.

Si dovrebbe sempre preferire l'uso delle annotazioni JPA standard a condizione che non siano necessarie funzioni speciali di Hibernate/semantica.

+0

Grazie così sembra che le annotazioni di Hibernate facciano esattamente le stesse annotazioni delle annotazioni JPA, quindi usale prima per quelle, poi completale con le annotazioni di Hibernate se necessario. Che dire delle incompatibilità descritte qui: http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/ –

Problemi correlati