JPAロック設定


Lock


テーブルデータ競合のロック処理方法の説明.

楽観ロック


ほとんどは衝突しないと仮定したロック方式だ.
コンカレント・リクエストは、競合の可能性が低い場合に例外が発生します.
ロックというより衝突検出に近い.OptimisticLockException異常が発生しました.

を選択します。

  • OPTIMISTIC (Read)
  • OPTIMISTIC_FORCE_INCREMENT (Write)
  • @Entity 
    public class User {
        ..
        
        @Version 
        private int version; 
    }
    @Versionを記入するだけです.
    エンティティの変更時にクエリのバージョンと同じかどうかを確認します.バージョンが異なる場合は例外が発生します.

    悲観ロック


    これは、データを修正する可能性が高いという悲観的な前提です.プリエンプトロックとも呼ばれます.
    同時要求による競合を回避するために、一貫性を確保します.
    しかし、性能の観点から見ると、損失に耐えなければならない.

    を選択します。

  • PESSIMISTIC_READ:Shared Lockを取得し、更新せず、削除しない.
  • PESSIMISTIC_WRITE:排他ロック(データベースが提供するβロック)を取得し、読み取り、更新、削除しない.
  • PESSIMISTIC_FORCE_INCREMENT:PESSIMISTIC WRITEと同様に、エンティティのバージョン属性を追加できます.
  • @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query("select u from user u")
    User findUsers();