ホームページ >Java >&#&チュートリアル >## JPA と Hibernate で `persist()` と `merge()` を使用する必要があるのはどのような場合ですか?

## JPA と Hibernate で `persist()` と `merge()` を使用する必要があるのはどのような場合ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 12:38:03762ブラウズ

## When Should I Use `persist()` vs. `merge()` in JPA and Hibernate?

JPA と Hibernate の Persist() と Merge() の違いを理解する

JPA と Hibernate では、persist() と merge () メソッドは、エンティティの管理とデータの永続性の処理において重要な役割を果たします。ただし、それらの動作には明確な違いがあります。

Persist()

JPA 仕様で定義されているpersist() メソッドは、次のように動作します。

  • エンティティが新規で管理されていない場合、エンティティは管理対象となり、トランザクションがコミットまたはフラッシュされるときにデータベースに保存されます。
  • エンティティがすでに管理または削除されている場合、操作は無視されます。
  • エンティティが切り離されている場合、例外がスローされるか、フラッシュまたはコミット時に永続化操作が失敗する可能性があります。
  • カスケード操作は、次のいずれかの参照エンティティに適用されます。 cascade=PERSIST または cascade=ALL annotations.

Merge()

一方、merge() メソッドには異なるセマンティクスのセットがあります。

  • エンティティが切り離された場合、その状態は同じ ID を持つ既存の管理対象エンティティにコピーされるか、新しい管理対象コピーが作成されます。
  • エンティティが新しい場合、新しい管理対象エンティティが作成され、その状態が受信エンティティからコピーされます。
  • エンティティが削除された場合、例外がスローされます。
  • エンティティが管理されている場合、操作は無視されますただし、cascade=MERGE または cascade=ALL の注釈が付けられている場合、カスケード操作は参照されたエンティティに引き続き適用されます。
  • マージされたエンティティは、cascade=MERGE または cascade=ALL の注釈が付けられたすべての関係の管理エンティティを参照します。
  • エンティティが非カスケード関係への参照とマージされる場合、マージされたエンティティからの関連付けは、同じ ID を持つ管理対象オブジェクトへの参照を返します。

時Persist() または Merge() を使用する

これらの違いに基づいて、次のガイドラインは適切なメソッドを選択するのに役立ちます。

  • 必要な場合はpersist() を使用してください。新しいエンティティを作成するか、永続コンテキストによってまだ管理されていない既存のエンティティを更新します。
  • すでに管理されているが永続コンテキストの外で変更された既存のエンティティを更新する場合は、merge() を使用します。 .

以上が## JPA と Hibernate で `persist()` と `merge()` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。