2

StaleObjectStateException最初のクエリと2番目のクエリの間の異なるセッション内での同時更新によってそのクエリの結果データが変更された場合、1つのtx内で同じクエリを2回実行すると、Hibernateでを取得できますか?

このシナリオでは、すべてのエンティティで楽観的同時実行制御を使用しています。

こんな感じです。

スレッド1:トランザクションが開始
されますスレッド1:クエリが実行されて取得されます。つまり、key = 4711の順序
スレッド2:キー4711の同じ順序が取得され、変更され、2番目のスレッドでコミットされます
スレッド1:クエリが再度実行され、戻る必要がありますkey=4711で注文する

StaleObjectStateException2番目のクエリでThread-1を取得しますか?

ご協力いただきありがとうございます!

トーマス

4

2 に答える 2

1

免責事項:私はそれを試していません、これは私が休止状態について知っていることから期待されることです。

2番目のクエリを実行するときも、スレッド1からのトランザクションがコミットされるときも、は取得されません。StaleObjectStateException

orderただし、 2番目のクエリが実行される前にが変更された場合、2番目のクエリが実行される直前にorderがフラッシュされ(自動フラッシュモードと読み取り/書き込みトランザクションを想定)、これにより。がトリガーされますStaleObjectStateException

于 2010-03-11T03:19:18.407 に答える
0

私はそうは思わない。スレッド1の2番目のクエリはデータベースにもヒットしません。第1レベルのキャッシュ(セッション)から(古い)オブジェクトを取得します。ただし、2番目のクエリの後で順序を変更すると、セッションをフラッシュするときに例外が発生します。

于 2010-02-27T16:52:39.473 に答える