2012-09-22 19 views
6

Ich habe versucht, Hibernate-Annotationen in die Finger zu bekommen. Als ich versuchte, Cascading zu verwenden, dann bekomme ich zwei Optionen in der Eclipse intellisense:Unterschied zwischen JPA Cascade-Annotationen und Hibernate Cascade-Annotation

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

In Hibernate CascadeType, gibt es viele Möglichkeiten gegeben als in JPA ist ein.

Gibt es einen Vorteil gegenüber einem anderen?

Antwort

8

Die javax.persistence-Annotationen sind eine Standardspezifikation. Die Hibernate-Annotationen repräsentieren die spezifische Implementierung von Hibernate. Sie überlappen sich meistens, aber der Hibernate CascadeType bietet einige zusätzliche Optionen, die spezifisch für Hibernate sind.

Verwenden Sie im Allgemeinen die javax.persistence-Annotationen, wann immer dies möglich ist. Verwenden Sie die Hibernate-Variante nur, wenn Sie eine Hibernate-spezifische Option benötigen und wissen, dass Sie wahrscheinlich nie zu einem anderen Persistenzanbieter wechseln müssen.

Viele Leute mischen die JPA/Hibernate-Annotationen innerhalb desselben Projekts, was eine gültige Aufgabe ist. Allerdings kann es subtile Interaktionen wie diese sein CascadeType beteiligt: ​​

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

Blick in den Code, @OneToMany von JPA ist, erwartet sie eine JPA Kaskade - javax.persistence.CascadeType. Allerdings, wenn Sie es mit Hibernate Sitzung speichern, wird org.hibernate.engine.Cascade folgendes tun

Prüfung

...

Der Hibernate Speichervorgang eine ACTION_SAVE_UPDATE Aktion verursacht, aber die JPA einen ACTION_PERSIST passieren und ACTION_MERGE, es wird nicht übereinstimmen und verursachen, dass die Kaskade nicht ausgeführt wurde.

Verwandte Themen