public enum LockModeType extends java.lang.Enum<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とP2の両方の現象を防止する必要があります。
さらに、LockModeType.OPTIMISTIC_FORCE_INCREMENT
がバージョン管理されたオブジェクトで呼び出された場合は、
エンティティのバージョンカラムが強制的に更新(インクリメント)されます。
JPAの実装ではバージョン管理されないオブジェクトに対する楽観ロックモードのサポートは必須ではありません。
そのようなロックの呼び出しをサポートしていない場合は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
型のロックを呼び出したした場合、
エンティティマネージャーは次のいずれの現象も起こらないようにする必要があります。
LockModeType.PESSIMISTIC_WRITE
のロックをエンティティのインスタンスで取得する事で
エンティティデータを更新を試みるトランザクションの処理を強制的に直列化することができます。
LLockModeType.PESSIMISTIC_READ
のロックを使用する事で、トランザクションの終了時にデータを再読み込みしてロックを取得する必要がなく、
また他のトランザクションのデータを読み取りをブロックすることもなく、反復可能な読み取りセマンティクスを使用してデータを問い合わせできます。
LockModeType.PESSIMISTIC_WRITE
のロックは、データの問い合わせに使用できますが、
並行更新トランザクション間でデッドロックや更新の失敗の可能性が高くなります。
JPAの実装ではバージョン管理されたエンティティと同様にバージョン管理されていないエンティティでLockModeType.PESSIMISTIC_READ
LockModeType.PESSIMISTIC_WRITE
型のロックの使用をサポートする必要があります。
ロックを取得できず、データベースのロックの失敗によりトランザクションレベルのロールバックが発生した場合、プロバイダはPessimisticLockException
を投げ、
JTAトランザクションまたはEntityTransaction
にロールバックのマークが付いていることを保証する必要があります。
ロックを取得できず、データベースのロックの失敗によりステートメントレベルのロールバックのみが発生した場合、
プロバイダはLockTimeoutException
を投げる必要があります。
(トランザクションにロールバックをマークしてはいけません)
列挙型定数と説明 |
---|
NONE
ロックしない。
|
OPTIMISTIC
楽観ロック。
|
OPTIMISTIC_FORCE_INCREMENT
バージョンのアップデートを伴う楽観ロック。
|
PESSIMISTIC_FORCE_INCREMENT
バージョンのアップデートを伴う悲観書き込みロック。
|
PESSIMISTIC_READ
悲観読み込みロック。
|
PESSIMISTIC_WRITE
悲観書き込みロック。
|
READ
OPTIMISTIC と同じ意味。 |
WRITE
OPTIMISTIC_FORCE_INCREMENT と同じ意味。 |
修飾子とタイプ | メソッドと説明 |
---|---|
static LockModeType |
valueOf(java.lang.String name)
指定した名前を持つこの型の列挙型定数を返します。
|
static LockModeType[] |
values()
この列挙型の定数を含む配列を宣言されている順序で返します。
|
public static final LockModeType READ
OPTIMISTIC
と同じ意味。
新しいアプリケーションではOPTIMISTIC
が好ましい。public static final LockModeType WRITE
OPTIMISTIC_FORCE_INCREMENT
と同じ意味。
新しいアプリケーションではOPTIMISTIC_FORCE_IMCREMENT
が好ましい。public static final LockModeType OPTIMISTIC
public static final LockModeType OPTIMISTIC_FORCE_INCREMENT
public static final LockModeType PESSIMISTIC_READ
public static final LockModeType PESSIMISTIC_WRITE
public static final LockModeType PESSIMISTIC_FORCE_INCREMENT
public static final LockModeType NONE
public static LockModeType[] values()
for(LockModeType c: LockModeType.values()) System.out.println(c);
public static LockModeType valueOf(java.lang.String name)
name
- 返される列挙型定数の名前。java.lang.IllegalArgumentException
- この列挙型に、指定した名前の定数がない場合java.lang.NullPointerException
- 引数がnullの場合Translated by @megascus.