Hibernate JPAカスケードタイプ

一対一マッピングや一対多マッピングなどの以前のチュートリアルでは、hibernateで関連するエンティティのマッピ そこで、リレーションシップオーナーエンティティが保存されるたびに、マップされたエンティティを保存したかったのです。 これを有効にするには、”CascadeType”属性を使用しました。 このJpaカスケードタイプのチュートリアルでは、CascadeType経由でカスケードするためのさまざまなタイプのオプションについて学びます。

JPAカスケードタイプはどのように機能しますか?

先に進む前に、このcascade type属性がコード内でどのように定義されているかを見てみましょう。 より明確な理解のための例を見てみましょう。 従業員が複数のアカウントを持つことができるシナリオを考えますが、1つのアカウントは1人の従業員にのみ関連付ける必要があります。 明確にするために、最小限の情報でエンティティを作成しましょう。

EmployeeEntity。java

AccountEntity。java

上記のソースコードの太字の行を見てくださいEmployeeEntity.javacascade=CascadeType.ALLEmployeeEntityAccountEntityにカスケードする必要があることを意味します。 従業員を保存すると、関連するすべてのアカウントもデータベースに保存されます。 従業員を削除すると、その従業員に関連付けられているすべてのアカウントも削除されます。 十分に簡単。しかし、保存操作のみをカスケードし、削除操作はカスケードしない場合はどうなりますか。 次に、以下のコードを使用して明確に指定する必要があります。

save()またはpersist()メソッドがemployeeインスタンスを使用して呼び出された場合にのみ、アカウントのみが永続化されます。 セッションで他のメソッドが呼び出された場合、その効果は/cascade to accountsには影響しません。

JPAカスケードタイプ

Java永続性アーキテクチャでサポートされているカスケードタイプは次のとおりです。

  1. CascadeType。PERSIST:cascade typepresistは、save()またはpersist()操作が関連するエンティティにカスケードすることを意味します。
  2. CascadeType.マージ : cascade typemergeは、所有するエンティティがマージされるときに関連するエンティティがマージされることを意味します。
  3. CascadeType.REFRESH:cascade typerefreshはrefresh()操作でも同じことを行います。
  4. CascadeType.REMOVE:cascade typeremove所有しているエンティティが削除されると、この設定との関連するすべてのエンティティの関連付けを削除します。
  5. CascadeType.DETACH:cascade typedetach“手動デタッチ”が発生した場合、関連するすべてのエンティティをデタッチします。
  6. CascadeType.すべて : cascade typeallは、上記のすべてのカスケード操作の省略形です。

JPAにはデフォルトのカスケードタイプはありません。 デフォルトでは、操作はカスケードされません。

cascade構成オプションはCascadeTypesの配列を受け入れるため、この例のように一対多のリレーションシップのカスケード操作に更新とマージのみを含めるには、次のようになります。

上記のカスケードでは、accounts collectionはマージされ、更新されます。

Hibernate Cascade Types

今、私たちはそれを使用するシナリオでhibernateでカスケードが何であるかを理解することができます。

jpaが提供するカスケードタイプとは別に、hibernateには”orphan removal”と呼ばれる、上記の通常のセットの一部ではないカスケード操作がもう一つあります。 これにより、所有しているオブジェクトが所有関係から削除されると、データベースから所有オブジェクトが削除されます。

例で理解しましょう。 従業員とアカウントエンティティの例では、以下のようにそれらを更新し、アカウントで「orphanRemoval=true」と述べました。 基本的には、「accounts setからaccountを削除する」(つまり、そのaccountとEmployeeの関係を削除することを意味します)を意味します。

EmployeeEntity。java

AccountEntity。java

TestOrphanRemovalCascade。java

これは、コレクションから一致/不一致の項目を削除する非常に良い方法です(つまり、多対一または一対多の関係)。 あなたはコレクションからアイテムを削除し、あなたのために残りのものを世話して休止状態にするだけです。 エンティティが任意の場所から参照されているかどうかをチェックします。

hibernate5cascade typesまたはJPA cascade typesに関するあなたの考えや質問があれば教えてください。

幸せな学習!

幸せな学習!!カスケードタイプに関するOracle Blog

この投稿は役に立ちましたか?

あなたが投稿を好きなら私たちに知らせてください。 それが私たちが改善できる唯一の方法です。
はい
いいえ

コメントを残す

メールアドレスが公開されることはありません。