列挙型 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_READ
LockModeType.PESSIMISTIC_WRITE
のロックの使用をサポートする必要があります。ロックを取得できず、データベースのロックに失敗するとトランザクションレベルのロールバックが発生する場合、プロバイダーは
PessimisticLockException
をスローし、JTA トランザクションまたはEntityTransaction
がロールバック用にマークされていることを確認する必要があります。ロックを取得できず、データベースのロックに失敗するとステートメントレベルのロールバックのみが発生する場合、プロバイダーは
LockTimeoutException
をスローする必要があります(トランザクションにロールバックのマークを付けてはなりません)。- 導入:
- 1.0
列挙定数のサマリー
列挙型定数 列挙定数 説明 NONE
ロックなし。OPTIMISTIC
楽観的ロック。OPTIMISTIC_FORCE_INCREMENT
楽観的ロック、バージョン更新あり。PESSIMISTIC_FORCE_INCREMENT
悲観的な書き込みロック、バージョン更新あり。PESSIMISTIC_READ
悲観的な読み取りロック。PESSIMISTIC_WRITE
悲観的な書き込みロック。READ
OPTIMISTIC
と同義です。WRITE
OPTIMISTIC_FORCE_INCREMENT
と同義です。
メソッドのサマリー
すべてのメソッド 静的メソッド 具象メソッド 修飾子と型 メソッド 説明 static LockModeType
valueOf(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 の場合