1

エンティティを更新する前に、エンティティの変更を計算しようとしています。

  1. HTMLフォームを表示する
  2. 送信時:
    1. トランザクションを開始します
    2. ロードエンティティ
    3. フォームデータをエンティティに適用する
    4. 変更を計算する
    5. 永続エンティティ

ステップ2.1から2.3は、MVCフレームワーク(Spring MVC)を介して管理されるため、変更を加えずに元のエンティティへの参照を実際に取得することはありません。

だから私が現在やろうとしていることは次のとおりです。

// transaction is already started
public Modifications store(Entity updated) {
    Entity original = entityManager.find(Entity.class, updated.getId());
    Modifications mods = calculateModifications(original, updated);
    entityManager.merge(updated);
    return mods;
}

しかし、残念ながら、私がエンティティマネージャーから受け取ったエンティティは==、更新されたものと同じ(読み取り)です。

質問は次のとおりです。更新されたエンティティをデタッチせずに、エンティティマネージャにデータベースからエンティティを再度ロードさせるにはどうすればよいですか。

私は永続性プロバイダーとしてHibernateを使用していますが、このプロバイダーを可能な限り不可知論的に保ちたいと思います。

4

2 に答える 2

2

ここにあなたの質問に似たSOの答えがありますHibernate:現在と以前のレコードの比較

メソッドを使用evictしてセッションキャッシュから古いインスタンスを削除し、calculateModificationsメソッドから取得した新しいインスタンスで更新を確認しますfind

于 2012-12-29T16:30:58.303 に答える