私はHibernateアノテーションを実際に試してみました。カスケードを使用しようとすると、Eclipseインテリセンスで2つのオプションが表示されます。
javax.persistence.CascadeType and org.hibernate.annotations.CascadeType
Hibernate CascadeTypeには、JPAのものよりも多くのオプションがあります。
お互いに利点はありますか?
私はHibernateアノテーションを実際に試してみました。カスケードを使用しようとすると、Eclipseインテリセンスで2つのオプションが表示されます。
javax.persistence.CascadeType and org.hibernate.annotations.CascadeType
Hibernate CascadeTypeには、JPAのものよりも多くのオプションがあります。
お互いに利点はありますか?
javax.persistenceアノテーションは標準仕様です。Hibernateアノテーションは、Hibernateの特定の実装を表します。それらはほとんど重複していますが、HibernateCascadeTypeはHibernateに固有のいくつかの追加オプションを提供します。
通常、可能な限り、javax.persistenceアノテーションを使用します。Hibernateに固有のオプションのいずれかが必要であり、別の永続性プロバイダーに切り替える必要がない可能性が高いことがわかっている場合にのみ、Hibernateバリアントを使用してください。
多くの人が同じプロジェクト内でJPA/Hibernateアノテーションを混合しますが、これは有効なことです。ただし、CascadeTypeを含むこのような微妙な相互作用が存在する可能性があります。
http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/
コードを見てください。@OneToManyはJPAからのものであり、JPAカスケード(javax.persistence.CascadeType)が必要です。ただし、Hibernateセッションで保存すると、org.hibernate.engine.Cascadeは次のチェックを行います
…</p>
Hibernateの保存プロセスによりACTION_SAVE_UPDATEアクションが発生しますが、JPAはACTION_PERSISTとACTION_MERGEを渡します。これらは一致せず、カスケードの実行に失敗します。