列挙型クラス LockModeType
- 実装されているすべてのインターフェース:
FindOption
、RefreshOption
、SerializableSE
、ComparableSE<LockModeType>
、ConstableSE
特定のロックモードは、引数として明示的な LockModeType
を渡すことによってリクエストできます。
- ロックを取得する
EntityManager
のメソッド (lock()
、find()
、またはrefresh()
) の 1 つ、または Query.setLockMode(LockModeType)
またはTypedQuery.setLockMode(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_READ
、PESSIMISTIC_WRITE
、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
ネストされたクラスの要約
クラス java.lang.EnumSE から継承されたネストクラス / インターフェース
Enum.EnumDescSE<ESE extends EnumSE<ESE>>
列挙定数のサマリー
列挙型定数列挙定数説明ロックなし。楽観的ロック。楽観的ロック、バージョン更新あり。悲観的な書き込みロック、バージョン更新あり。悲観的な読み取りロック。悲観的な書き込みロック。OPTIMISTIC
と同義。メソッドのサマリー
修飾子と型メソッド説明static LockModeType
指定された名前でこのクラスの列挙型定数を返します。static LockModeType[]
values()
この列挙型クラスの定数を含む配列を、宣言されている順序で返します。クラス java.lang.EnumSE から継承されたメソッド
clone, compareToSE, describeConstable, equalsSE, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOfSE
列挙型定数の詳細
READ
OPTIMISTIC
と同義。新しいアプリケーションには
OPTIMISTIC
が推奨されます。WRITE
OPTIMISTIC_FORCE_INCREMENT
と同義。新しいアプリケーションには
OPTIMISTIC_FORCE_INCREMENT
が推奨されます。OPTIMISTIC
楽観的ロック。- 導入:
- 2.0
OPTIMISTIC_FORCE_INCREMENT
楽観的ロック、バージョン更新あり。- 導入:
- 2.0
PESSIMISTIC_READ
悲観的な読み取りロック。- 導入:
- 2.0
PESSIMISTIC_WRITE
悲観的な書き込みロック。- 導入:
- 2.0
PESSIMISTIC_FORCE_INCREMENT
悲観的な書き込みロック、バージョン更新あり。- 導入:
- 2.0
NONE
ロックなし。- 導入:
- 2.0
メソッドの詳細
values
この列挙型クラスの定数を含む配列を、宣言されている順序で返します。- 戻り値:
- この列挙型クラスの定数を宣言された順序で含む配列
valueOf
指定された名前でこのクラスの列挙型定数を返します。文字列は、このクラスで列挙型定数を宣言するために使用される識別子と正確に一致する必要があります。(余分な空白文字は許可されません。)- パラメーター:
name
- 返される列挙定数の名前。- 戻り値:
- 指定された名前の列挙定数
- 例外:
IllegalArgumentExceptionSE
- この列挙型クラスに指定された名前の定数がない場合NullPointerExceptionSE
- 引数が null の場合