4.7. 自動ステータス検出


マージ操作はデタッチ済みのインスタンスのマージにより挿入または更新が必要になるかどうかを自動的に検出します。つまり、新しいインスタンス (およびデタッチ済みのインスタンス) を merge() に渡すことについて心配する必要はありません。この作業はエンティティマネージャが行います。
// In the first entity manager
Cat cat = firstEntityManager.find(Cat.class, catID);

// In a higher layer of the application, detached
Cat mate = new Cat();
cat.setMate(mate);

// Later, in a new entity manager
secondEntityManager.merge(cat);   // update existing state
secondEntityManager.merge(mate);  // save the new instance
Copy to Clipboard Toggle word wrap
新しいユーザーは merge() の使用方法とセマンティクスについて混乱するかもしれません。別の新しいエンティティマネージャの 1 つのエンティティマネージャでロードされたオブジェクトステータスを使用しない限り、merge() を使用しないでください。一部のアプリケーションはこのメソッドを使用しません。
通常、merge() は次のシナリオで使用されます。
  • アプリケーションは最初のエンティティマネージャでオブジェクトをロードします
  • オブジェクトはプレゼンテーション層に渡されます
  • いくつかの変更がオブジェクトに行われます
  • オブジェクトがビジネスロジック層に渡されます
  • アプリケーションはセカンダリエンティティマネージャで merge() を呼び出すことによりこれらの変更を永続化します
merge() の適切なセマンティックは以下のとおりです。
  • 永続コンテキストで現在関連付けられたのと同じ ID を持つ管理対象インスタンスが存在する場合は、該当するオブジェクトのステータスを管理対象インスタンスにコピーします。
  • 永続コンテキストに現在関連付けれた管理対象インスタンスが存在しない場合は、データベースからロードするか、新しい管理対象インスタンスを作成します。
  • 管理対象インスタンスが返されます
  • 該当するインスタンスが永続コンテキストに関連付けられてない場合、コンテキストはデタッチ済みのままになり、通常は破棄されます

注記

JPA でのマージはネイティブ Hibernate での saveOrUpdateCopy() メソッドに似ています。ただし、saveOrUpdate() メソッドとは同じではありません。該当するインスタンスは永続コンテキストに再びアタッチされず、管理対象インスタンスが merge() メソッドにより返されます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat