パッケージ jakarta.persistence

列挙型 LockModeType

  • 実装されたすべてのインターフェース:
    SerializableSEComparableSE<LockModeType>

    public enum LockModeType
    extends EnumSE<LockModeType>
    ロックモードは、ロックを取得する EntityManager メソッドの 1 つ(lockfindrefresh)または Query.setLockMode() または TypedQuery.setLockMode() メソッドに LockModeType 引数を渡すことによって指定できます。

    ロックモードを使用して、楽観的または悲観的なロックを指定できます。

    楽観的ロックは、LockModeType.OPTIMISTIC および LockModeType.OPTIMISTIC_FORCE_INCREMENT を使用して指定されます。ロックモード型の値 LockModeType.READ および LockModeType.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 をスローする必要があります。

    ロックモード LockModeType.PESSIMISTIC_READLockModeType.PESSIMISTIC_WRITELockModeType.PESSIMISTIC_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_READLockModeType.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_IMCREMENT は、新しいアプリケーションに適しています。
      • 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()
        この列挙型の定数を含む配列を、宣言されている順序で返します。このメソッドは、次のように定数を反復するために使用できます。
        for (LockModeType c : LockModeType.values())
            System.out.println(c);
        
        戻り値:
        この列挙型の定数を宣言されている順序で含む配列
      • valueOf

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