javax.persistence

## Enum LockModeType

- java.lang.Object
- - java.lang.Enum<LockModeType>
  - - javax.persistence.LockModeType

- All Implemented Interfaces:
    Serializable, Comparable<LockModeType>

      public enum LockModeType
      extends Enum<LockModeType>

  Lock modes can be specified by means of passing a `LockModeType` argument to one of the `EntityManager` methods that take locks (`lock`, `find`, or `refresh`) or to the `Query.setLockMode()` or `TypedQuery.setLockMode()` method.

  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 Constants
    Enum Constant and Description
    `NONE` No lock.
    `OPTIMISTIC` Optimistic lock.
    `OPTIMISTIC_FORCE_INCREMENT` Optimistic lock, with version update.
    `PESSIMISTIC_FORCE_INCREMENT` Pessimistic write lock, with version update.
    `PESSIMISTIC_READ` Pessimistic read lock.
    `PESSIMISTIC_WRITE` Pessimistic write lock.
    `READ` Synonymous with `OPTIMISTIC`.
    `WRITE` Synonymous with `OPTIMISTIC_FORCE_INCREMENT`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static LockModeType` | `valueOf(String name)` Returns 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.

    - ### Methods inherited from class java.lang.Enum

      `clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf`

    - ### Methods inherited from class java.lang.Object

      `getClass, notify, notifyAll, wait, wait, wait`

- - ### Enum Constant Detail

    - #### READ

          public static final LockModeType READ

      Synonymous with `OPTIMISTIC`. `OPTIMISTIC` is to be preferred for new applications.

    - #### WRITE

          public static final LockModeType WRITE

      Synonymous with `OPTIMISTIC_FORCE_INCREMENT`. `OPTIMISTIC_FORCE_IMCREMENT` is to be preferred for new applications.

    - #### OPTIMISTIC

          public static final LockModeType OPTIMISTIC

      Optimistic lock.
      Since:
        Java Persistence 2.0

    - #### OPTIMISTIC_FORCE_INCREMENT

          public static final LockModeType OPTIMISTIC_FORCE_INCREMENT

      Optimistic lock, with version update.
      Since:
        Java Persistence 2.0

    - #### PESSIMISTIC_READ

          public static final LockModeType PESSIMISTIC_READ

      Pessimistic read lock.
      Since:
        Java Persistence 2.0

    - #### PESSIMISTIC_WRITE

          public static final LockModeType PESSIMISTIC_WRITE

      Pessimistic write lock.
      Since:
        Java Persistence 2.0

    - #### PESSIMISTIC_FORCE_INCREMENT

          public static final LockModeType PESSIMISTIC_FORCE_INCREMENT

      Pessimistic write lock, with version update.
      Since:
        Java Persistence 2.0

    - #### NONE

          public static final LockModeType NONE

      No lock.
      Since:
        Java Persistence 2.0

  - ### Method Detail

    - #### values

          public static LockModeType[] values()

      Returns an array containing the constants of this enum type, in the order they are declared. This method may be used to iterate over the constants as follows:

          for (LockModeType c : LockModeType.values())
              System.out.println(c);

      Returns:
        an array containing the constants of this enum type, in the order they are declared

    - #### valueOf

          public static LockModeType valueOf(String name)

      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 name
        `NullPointerException` - if the argument is null

Copyright © 1996-2013, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms.