列挙型 LockModeType
- java.lang.ObjectSE
-
- java.lang.EnumSE<LockModeType>
-
- jakarta.persistence.LockModeType
- 実装されているすべてのインターフェース:
SerializableSE,ComparableSE<LockModeType>
public enum LockModeType extends EnumSE<LockModeType>
ロックモードは、ロックを取得するEntityManagerメソッドの 1 つ(lock、find、refresh)または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_READ、LockModeType.PESSIMISTIC_WRITE、LockModeType.PESSIMISTIC_FORCE_INCREMENTは、長期データベースロックを即座に取得するために使用されます。型
LockModeType.PESSIMISTIC_READ、LockModeType.PESSIMISTIC_WRITE、LockModeType.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
列挙定数のサマリー
列挙型定数 列挙定数 説明 NONEロックなし。OPTIMISTIC楽観的ロック。OPTIMISTIC_FORCE_INCREMENT楽観的ロック、バージョン更新あり。PESSIMISTIC_FORCE_INCREMENT悲観的な書き込みロック、バージョン更新あり。PESSIMISTIC_READ悲観的な読み取りロック。PESSIMISTIC_WRITE悲観的な書き込みロック。READOPTIMISTICと同義です。WRITEOPTIMISTIC_FORCE_INCREMENTと同義です。
メソッドのサマリー
すべてのメソッド 静的メソッド 具象メソッド 修飾子と型 メソッド 説明 static LockModeTypevalueOf(StringSE name)指定された名前を持つこの型の列挙定数を返します。static LockModeType[]values()この列挙型の定数を含む配列を、宣言されている順序で返します。
列挙定数の詳細
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 の場合