The semantics of requesting locks of type
LockModeType.READ and LockModeType.WRITE are the following.
If transaction T1 calls lock(entity, LockModeType.READ ) on a versioned object,
the entity manager must ensure that neither of the following
phenomena can occur:
Lock modes must always prevent the phenomena P1 and P2.
In addition, calling lock(entity, LockModeType.WRITE) on
a versioned object, will also force an update (increment) to
the entity's version column.
The persistence implementation is not required to support
calling EntityManager.lock() on a
non-versioned object. When it cannot support a such lock call,
it must throw the PersistenceException .