0

私の JPA 実装では、em.find() を実行してオブジェクトのリストを選択し、これらのオブジェクトを変更します。次に、トランザクション内で em.merge() を呼び出してこれらの変更されたオブジェクトを更新します (他の関連するものを永続化するために TX )。 .

これは、SELECT が 2 回 (検索中に 1 回、その他のときに 1 回) 発生するという事実を除いて、うまく機能します。

em.merge() のトランザクション境界内に find() を持ち込むのは気が進まないでしょう。

別の SELECT を発行せずにこれらのオブジェクトを更新する唯一の方法は、独自の NamedQuery を定義することですか?

ありがとう

4

1 に答える 1

0

JTA 管理の EntityManager を使用している場合、各トランザクション境界は新しい永続化コンテキストになり、共有キャッシュが構成されていない限り、データベースに戻る必要があります。

どの JPA プロバイダーを使用していますか? EclipseLink を使用している場合、共有キャッシュはデフォルトで有効になっています。

JPA トランザクションの場合、検索とマージに同じ EntityManager を使用する場合は、永続化コンテキストにある必要があります。

于 2012-01-19T14:41:29.013 に答える