2012-09-22 49 views
6

Stavo provando con le annotazioni Hibernate. Quando ho cercato di usare Cascading poi ho due opzioni nella Eclipse intellisense:Differenza tra annotazioni Cascade JPA e annotazione Hibernate Cascade

javax.persistence.CascadeType and org.hibernate.annotations.CascadeType 

In ibernazione CascadeType, ci sono molte opzioni dato che in un dell'APP.

C'è qualche vantaggio l'uno rispetto all'altro?

risposta

8

Le annotazioni javax.persistence sono una specifica degli standard. Le annotazioni di ibernazione rappresentano l'implementazione specifica di Hibernate. Si sovrappongono per lo più, ma Hibernate CascadeType fornisce alcune opzioni aggiuntive specifiche per Hibernate.

In genere, utilizzare le annotazioni javax.persistence quando possibile. Usa la variante Hibernate solo se hai bisogno di una delle opzioni specifiche di Hibernate e sai che probabilmente non dovrai mai passare ad un altro fornitore di persistenza.

Molte persone mescolano le annotazioni JPA/Hibernate all'interno dello stesso progetto che è una cosa valida da fare. Tuttavia, ci possono essere interazioni sottili come questo che coinvolge CascadeType:

http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/

Cerca in codice, @OneToMany è da APP, si aspettava una cascata JPA - javax.persistence.CascadeType. Tuttavia, quando si salva con Hibernate sessione, org.hibernate.engine.Cascade farà il seguente controllo

...

Il Hibernate salvare processo provocando un'azione ACTION_SAVE_UPDATE, ma l'APP passerà un ACTION_PERSIST e ACTION_MERGE, non corrisponderà a e causerà l'esecuzione non riuscita della cascata.