2 に答える
1
すべてのコンテキストを指定したかどうかはわかりませんが、(1)と(2)が同じトランザクション内で実行されている場合、エンティティはL1キャッシュにあると言えます。これは、質問が示唆していることであり、 「行の更新」は、別の永続コンテキスト(ネストされたトランザクション)内で実行されたため表示されません。したがって、refresh
データベースからインスタンスの状態を取得する必要があります。
于 2010-05-01T01:12:11.650 に答える
1
私はPascalに同意します。EJB1からの2つの呼び出しが同じトランザクション内にある場合、(2)は別のトランザクションで実行されたため、(1)によって実行された変更を確認できないことは明らかです(もちろん、妥当なトランザクション分離レベルを想定しています)
1. EJB1 transaction (TX1) starts
2. EJB1.(1) called
3. EJB2.update row started => TX1 is suspended and
a new transaction, TX2, is started
4. The update is performed
5. TX2 commits
6. TX1 is resumed - it can't see changes by TX2 because it's isolated from
changes performed by other transactions during its "life"
7. EJB1.(2) invokes EJB2.find row withing the context of TX1 => can't see TX2's changes
8. TX1 commits
于 2010-05-03T21:57:05.473 に答える