4.6. デタッチ済みのオブジェクトの変更


多くのアプリケーションは、 1 つのトランザクションで 1 つのオブジェクトを取得し、操作のためにプレゼンテーション層に送信し、新しいトランザクションで変更を保存する必要があります。ユーザーがトランザクションとトランザクションの間に考える場合は、待機時間が非常に長くなることがあります。高同時実行環境でこのような方法を使用するアプリケーションは、通常「長い」単位の作業を分離するために、バージョン管理されたデータを使用します。
JPA 仕様では、EntityManager.merge() メソッドを使用してデタッチ済みのインスタンスに行われる変更の永続化を提供することにより、この開発モデルがサポートされます。
// in the first entity manager
Cat cat = firstEntityManager.find(Cat.class, catId);
Cat potentialMate = new Cat();
firstEntityManager.persist(potentialMate);

// in a higher layer of the application
cat.setMate(potentialMate);

// later, in a new entity manager
secondEntityManager.merge(cat);  // update cat
secondEntityManager.merge(mate); // update mate
merge() メソッドは、永続コンテキストのステータスを考慮せずにデタッチ済みのインスタンスに行われた変更を対応する管理対象インスタンスにマージします。つまり、マージされたオブジェクトステータスは、永続エンティティステータスをオーバーライドします (すでに存在する場合)。アプリケーションは、該当するデタッチ済みのインスタンスから到達可能なデタッチ済みのインスタンスに対して merge() を個別に使用します (ステータスを保持したい場合)。これは、推移の永続化を使用して関連するエンティティとコレクションにカスケードできます (「遷移の永続化」 を参照)。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る