2012-09-22 10 views
6

私は、Hibernateアノテーションを手に入れようとしていました。私はカスケードを使用しようとしたとき、私は2つのEclipseのインテリセンスのオプションを取得:休止状態CascadeTypeJPAカスケードアノテーションとHibernateカスケードアノテーションの違い

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

を、JPAの1よりも与えられた多くのオプションがあります。

別の利点はありますか?

答えて

8

javax.persistenceアノテーションは標準仕様です。休止状態の注釈は、Hibernateの特定の実装を表します。ほとんど重複していますが、Hibernate CascadeTypeはHibernateに固有のオプションをいくつか追加しています。

一般的に、可能であれば、javax.persistence注釈を使用してください。 Hibernateに特有のオプションの1つが必要な場合にのみ、Hibernateの亜種を使用し、他の永続性プロバイダに切り替える必要がない可能性が高いことを知ってください。

多くの人がJPA/Hibernateアノテーションを同じプロジェクト内で混在させていますが、それは有効なものです。しかし、CascadeTypeを含むこのような微妙な相互作用があることができます: - javax.persistence.CascadeTypeコードで

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

見て、@OneToManyはJPAからで、それはJPAのカスケードを期待しました。しかし、あなたが休止状態 セッションでそれを保存するとき、org.hibernate.engine.Cascadeが

をチェックし、次の操作を行います...

Hibernateは、プロセスがACTION_SAVE_UPDATEアクションを起こします保存 が、JPAはACTION_PERSISTを通過し、 ACTION_MERGE、それは と一致せず、カスケードを実行できませんでした。