- All Implemented Interfaces:
Serializable,Comparable<LockModeType>
LockModeType argument to one of the
invalid reference
javax.persistence.EntityManager
lock, find, or
refresh) or to the Query.setLockMode() or
invalid reference
TypedQuery.setLockMode()
Lock modes can be used to specify either optimistic or pessimistic locks.
Optimistic locks are specified using LockModeType.OPTIMISTIC and
LockModeType.OPTIMISTIC_FORCE_INCREMENT. The lock mode type
values LockModeType.READ and LockModeType.WRITE are
synonyms of OPTIMISTIC and OPTIMISTIC_FORCE_INCREMENT respectively. The latter
are to be preferred for new applications.
The semantics of requesting locks of type LockModeType.OPTIMISTIC and
LockModeType.OPTIMISTIC_FORCE_INCREMENT are the following.
If transaction T1 calls for a lock of type LockModeType.OPTIMISTIC on a versioned object, the
entity manager must ensure that neither of the following phenomena can occur:
- P1 (Dirty read): Transaction T1 modifies a row. Another transaction T2 then reads that row and obtains the modified value, before T1 has committed or rolled back. Transaction T2 eventually commits successfully; it does not matter whether T1 commits or rolls back and whether it does so before or after T2 commits.
- P2 (Non-repeatable read): Transaction T1 reads a row. Another transaction T2 then modifies or deletes that row, before T1 has committed. Both transactions eventually commit successfully.
Lock modes must always prevent the phenomena P1 and P2.
In addition, calling a lock of type LockModeType.OPTIMISTIC_FORCE_INCREMENT on a versioned
object, will also force an update (increment) to the entity's version column.
The persistence implementation is not required to support the use of optimistic lock modes on non-versioned
objects. When it cannot support a such lock call, it must throw the PersistenceException.
The lock modes LockModeType.PESSIMISTIC_READ,
LockModeType.PESSIMISTIC_WRITE, and
LockModeType.PESSIMISTIC_FORCE_INCREMENT are used to
immediately obtain long-term database locks.
The semantics of requesting locks of type LockModeType.PESSIMISTIC_READ,
LockModeType.PESSIMISTIC_WRITE, and LockModeType.PESSIMISTIC_FORCE_INCREMENT are
the following.
If transaction T1 calls for a lock of type LockModeType.PESSIMISTIC_READ or
LockModeType.PESSIMISTIC_WRITE on an object, the entity manager must ensure that neither of
the following phenomena can occur:
- P1 (Dirty read): Transaction T1 modifies a row. Another transaction T2 then reads that row and obtains the modified value, before T1 has committed or rolled back.
- P2 (Non-repeatable read): Transaction T1 reads a row. Another transaction T2 then modifies or deletes that row, before T1 has committed or rolled back.
A lock with LockModeType.PESSIMISTIC_WRITE can be obtained on an entity instance to force
serialization among transactions attempting to update the entity data. A lock with
LockModeType.PESSIMISTIC_READ can be used to query data using repeatable-read semantics
without the need to reread the data at the end of the transaction to obtain a lock, and without blocking
other transactions reading the data. A lock with LockModeType.PESSIMISTIC_WRITE can be used
when querying data and there is a high likelihood of deadlock or update failure among concurrent updating
transactions.
The persistence implementation must support use of locks of type LockModeType.PESSIMISTIC_READ
LockModeType.PESSIMISTIC_WRITE on a non-versioned entity as well as on a versioned entity.
When the lock cannot be obtained, and the database locking failure results in transaction-level rollback,
the provider must throw the PessimisticLockException and ensure that the JTA transaction or
EntityTransaction has been marked for rollback.
When the lock cannot be obtained, and the database locking failure results in only statement-level
rollback, the provider must throw the LockTimeoutException (and must not mark the transaction for
rollback).
- Since:
- Java Persistence 1.0
-
Enum Constant Summary
Enum ConstantsEnum ConstantDescriptionNo lock.Optimistic lock.Optimistic lock, with version update.Pessimistic write lock, with version update.Pessimistic read lock.Pessimistic write lock.Synonymous withOPTIMISTIC.Synonymous withOPTIMISTIC_FORCE_INCREMENT. -
Method Summary
Modifier and TypeMethodDescriptionstatic LockModeTypeReturns the enum constant of this type with the specified name.static LockModeType[]values()Returns an array containing the constants of this enum type, in the order they are declared.
-
Enum Constant Details
-
READ
Synonymous withOPTIMISTIC.OPTIMISTICis to be preferred for new applications. -
WRITE
Synonymous withOPTIMISTIC_FORCE_INCREMENT.OPTIMISTIC_FORCE_IMCREMENTis to be preferred for new applications. -
OPTIMISTIC
Optimistic lock.- Since:
- Java Persistence 2.0
-
OPTIMISTIC_FORCE_INCREMENT
Optimistic lock, with version update.- Since:
- Java Persistence 2.0
-
PESSIMISTIC_READ
Pessimistic read lock.- Since:
- Java Persistence 2.0
-
PESSIMISTIC_WRITE
Pessimistic write lock.- Since:
- Java Persistence 2.0
-
PESSIMISTIC_FORCE_INCREMENT
Pessimistic write lock, with version update.- Since:
- Java Persistence 2.0
-
NONE
No lock.- Since:
- Java Persistence 2.0
-
-
Method Details
-
values
Returns an array containing the constants of this enum type, in the order they are declared.- Returns:
- an array containing the constants of this enum type, in the order they are declared
-
valueOf
Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)- Parameters:
name- the name of the enum constant to be returned.- Returns:
- the enum constant with the specified name
- Throws:
IllegalArgumentException- if this enum type has no constant with the specified nameNullPointerException- if the argument is null
-