JPA 2.1仕様によると...
ロック モード
PESSIMISTIC_READ
、PESSIMISTIC_WRITE
、およびPESSIMISTIC_FORCE_INCREMENT
は、長期データベース ロックを即座に取得するために使用されます。
SELECT ... FOR UPDATE
どのロックモードが使用されていても、悲観的ロックは常にデータベースで SQL をトリガーすると思います。それについて3つの質問があります:
- 仮定は正しいですか、それとも正しい場合、この規則からの例外はありますか?
- 行が
SELECT ... FOR UPDATE
ロックされているとします。ロックされた行は、それをロックしたトランザクション以外のトランザクションによって更新できませんか? - ロックは、トランザクションに対してコミットまたはロールバックを実行することで解放できます。アプリケーション (および行をロックしたトランザクション) が、トランザクションでコミットまたはロールバックを実行せずに突然終了した場合、ロックはどうなりますか?