パッケージ jakarta.persistence

列挙型クラス LockModeType

java.lang.ObjectSE
java.lang.EnumSE<LockModeType>
jakarta.persistence.LockModeType
実装されているすべてのインターフェース:
FindOptionRefreshOptionSerializableSEComparableSE<LockModeType>ConstableSE

public enum LockModeType extends EnumSE<LockModeType> implements FindOption, RefreshOption
エンティティインスタンスで取得できる楽観的ロックまたは悲観的ロックの種類を列挙します。

特定のロックモードは、引数として明示的な LockModeType を渡すことによってリクエストできます。

楽観的ロックは、LockModeType.OPTIMISTIC および OPTIMISTIC_FORCE_INCREMENT を使用して指定されます。ロックモード型 READ および WRITE は、それぞれ OPTIMISTIC および OPTIMISTIC_FORCE_INCREMENT と同義です。新しいアプリケーションには後者が推奨されます。

型 LockModeType.OPTIMISTIC および LockModeType.OPTIMISTIC_FORCE_INCREMENT のロックをリクエストするセマンティクスは次のとおりです。

トランザクション T1 がバージョン管理されたオブジェクトで型 LockModeType.OPTIMISTIC のロックを要求する場合、エンティティマネージャーは、次のいずれの現象も発生しないようにする必要があります。

  • P1 (ダーティリード): トランザクション T1 は行を変更します。次に、別のトランザクション T2 がその行を読み取り、T1 がコミットまたはロールバックする前に、変更された値を取得します。トランザクション T2 は最終的に正常にコミットします。T1 がコミットするかロールバックするか、T2 がコミットする前かロールバックするかは関係ありません。
  • P2 (繰り返し不可の読み取り): トランザクション T1 は行を読み取ります。次に、別のトランザクション T2 は、T1 がコミットする前に、その行を変更または削除します。両方のトランザクションは最終的に正常にコミットします。

ロックモードは常に現象 P1 と P2 を防ぐ必要があります。

さらに、バージョン管理されたオブジェクトで型 LockModeType.OPTIMISTIC_FORCE_INCREMENT のロックを取得すると、エンティティのバージョン列が強制的に更新 (増分) されます。

永続性の実装は、バージョン管理されていないオブジェクトでのオプティミスティックロックモードの使用をサポートする必要はありません。このようなロックリクエストをサポートできない場合は、PersistenceException をスローする必要があります。

ロックモード PESSIMISTIC_READPESSIMISTIC_WRITEPESSIMISTIC_FORCE_INCREMENT は、長期データベースロックを即座に取得するために使用されます。

型 LockModeType.PESSIMISTIC_READLockModeType.PESSIMISTIC_WRITELockModeType.PESSIMISTIC_FORCE_INCREMENT のロックをリクエストするセマンティクスは次のとおりです。

トランザクション T1 がオブジェクトに対して型 LockModeType.PESSIMISTIC_READ または LockModeType.PESSIMISTIC_WRITE のロックを要求する場合、エンティティマネージャーは、以下の現象のいずれも発生しないことを確認する必要があります。

  • P1 (ダーティリード): トランザクション T1 は行を変更します。次に、別のトランザクション T2 がその行を読み取り、T1 がコミットまたはロールバックする前に、変更された値を取得します。
  • P2 (繰り返し不可の読み取り): トランザクション T1 は行を読み取ります。次に、別のトランザクション T2 は、T1 がコミットまたはロールバックする前に、その行を変更または削除します。

エンティティインスタンスで LockModeType.PESSIMISTIC_WRITE のロックを取得して、エンティティデータを更新しようとするトランザクション間で直列化を強制できます。LockModeType.PESSIMISTIC_READ を使用したロックを使用すると、トランザクションの最後にデータを再読み取りしてロックを取得したり、データの読み取りをブロックしたりすることなく、繰り返し読み取りセマンティクスを使用してデータを照会できます。LockModeType.PESSIMISTIC_WRITE を使用したロックは、データを照会するときに使用でき、同時更新トランザクション間でデッドロックまたは更新失敗の可能性が高くなります。

永続性の実装は、バージョン管理されていないエンティティおよびバージョン管理されたエンティティでの LockModeType.PESSIMISTIC_READ および LockModeType.PESSIMISTIC_WRITE 型のロックの使用をサポートする必要があります。

ロックを取得できず、データベースのロックに失敗するとトランザクションレベルのロールバックが発生する場合、プロバイダーは PessimisticLockException をスローし、JTA トランザクションまたは EntityTransaction がロールバック用にマークされていることを確認する必要があります。

ロックを取得できず、データベースのロックに失敗するとステートメントレベルのロールバックのみが発生する場合、プロバイダーは LockTimeoutException をスローする必要があります(トランザクションにロールバックのマークを付けてはなりません)。

導入:
1.0
  • 列挙型定数の詳細

    • READ

      public static final LockModeType READ
      OPTIMISTIC と同義。

      新しいアプリケーションには OPTIMISTIC が推奨されます。

    • WRITE

      public static final LockModeType WRITE
      OPTIMISTIC_FORCE_INCREMENT と同義。

      新しいアプリケーションには OPTIMISTIC_FORCE_INCREMENT が推奨されます。

    • OPTIMISTIC

      public static final LockModeType OPTIMISTIC
      楽観的ロック。
      導入:
      2.0
    • OPTIMISTIC_FORCE_INCREMENT

      public static final LockModeType OPTIMISTIC_FORCE_INCREMENT
      楽観的ロック、バージョン更新あり。
      導入:
      2.0
    • PESSIMISTIC_READ

      public static final LockModeType PESSIMISTIC_READ
      悲観的な読み取りロック。
      導入:
      2.0
    • PESSIMISTIC_WRITE

      public static final LockModeType PESSIMISTIC_WRITE
      悲観的な書き込みロック。
      導入:
      2.0
    • PESSIMISTIC_FORCE_INCREMENT

      public static final LockModeType PESSIMISTIC_FORCE_INCREMENT
      悲観的な書き込みロック、バージョン更新あり。
      導入:
      2.0
    • NONE

      public static final LockModeType NONE
      ロックなし。
      導入:
      2.0
  • メソッドの詳細

    • values

      public static LockModeType[] values()
      この列挙型クラスの定数を含む配列を、宣言されている順序で返します。
      戻り値:
      この列挙型クラスの定数を宣言された順序で含む配列
    • valueOf

      public static LockModeType valueOf(StringSE name)
      指定された名前でこのクラスの列挙型定数を返します。文字列は、このクラスで列挙型定数を宣言するために使用される識別子と正確に一致する必要があります。(余分な空白文字は許可されません。)
      パラメーター:
      name - 返される列挙定数の名前。
      戻り値:
      指定された名前の列挙定数
      例外:
      IllegalArgumentExceptionSE - この列挙型クラスに指定された名前の定数がない場合
      NullPointerExceptionSE - 引数が null の場合