JPA Method
in jakarta.persistence.EntityManager

T find(
  Class<T> entityClass, 
  Object primaryKey, 
  LockModeType lockMode, 
  Map<String,Object> properties
)


Find by primary key and lock the entity, using the specified properties. Search for an entity of the specified class and primary key, and lock it with respect to the specified lock type. If the entity instance is contained in the persistence context, it is returned from there.

If the entity is found within the persistence context and the lock mode type is pessimistic and the entity has a version attribute, the persistence provider must perform optimistic version checks when obtaining the database lock. If these checks fail, the OptimisticLockException is thrown.

If the lock mode type is pessimistic and the entity instance is found but cannot be locked:

If a vendor-specific property or hint is not recognized, it is silently ignored.

Portable applications should not rely on the standard timeout hint. Depending on the database in use and the locking mechanisms used by the provider, the hint may or may not be observed.

Parameters:
entityClass - entity class
primaryKey - primary key
lockMode - lock mode
properties - standard and vendor-specific properties and hints
Return:
the found entity instance or null if the entity does not exist
Throws:
IllegalArgumentException - if the first argument does not denote an entity type or the second argument is not a valid type for that entity's primary key or is null
TransactionRequiredException - if there is no transaction and a lock mode other than {@code NONE} is specified or if invoked on an entity manager which has not been joined to the current transaction and a lock mode other than {@code NONE} is specified
OptimisticLockException - if the optimistic version check fails
PessimisticLockException - if pessimistic locking fails and the transaction is rolled back
LockTimeoutException - if pessimistic locking fails and only the statement is rolled back
PersistenceException - if an unsupported lock call is made
Since:
JPA 2.0