私はJPAにまったく慣れておらず、JPA2.0のロックモードに関するこの記事を読んだので、LockModeType.OPTIMISTIC_FORCE_INCREMENTに関する質問が残りました。
これが記事の例の画像です:http://i.stack.imgur.com/dFjhZ.jpg
これまでのところ、トランザクションT1での明示的な楽観的ロックは、エンティティAへの更新が、読み取られたばかりの別のエンティティBの状態に依存している場合にのみ必要であることを理解しています。
また、OPTIMISTIC_FORCE_INCREMENTを使用してロックすると、Bがそのバージョン属性を更新することを理解しています。これにより、Bを更新しようとし、ロックが発行される前に(つまり、古いバージョン値で)それを読み取ろうとするすべてのトランザクションでOptimisticLockExceptionが発生します。
私の質問は、Bのバージョンがインクリメントされた直後に別のトランザクションT2が開始され、Bが変更され、T1がコミットする前に終了した場合はどうなりますか?
私が理解している限り、T1はOptimisticLockExceptionを取得する必要があります。もしそうなら、それはT1の脆弱な時間枠をわずかに減らしたので、このロックのポイントは何ですか?つまり、T1が終了するまでBが変更されないようにする場合は、悲観的なロックが必要です。
これを私に明確にしてくれてありがとう:)