Я прочитал статью о блоге Oracle здесь о режимах JPA и блокировки.
Я не очень хорошо понимаю разницу между типами режима блокировки OPTIMISTIC
и OPTIMISTIC_FORCE_INCREMENT
.
OPTIMISTIC
:
Когда пользователь блокирует объект в этом режиме, в начале транзакции выполняется проверка объекта объекта версии (@version
), а в конце транзакции также выполняется проверка поля версии. Если версии отличаются друг от друга, транзакция возвращается.
OPTIMISTIC_FORCE_INCREMENT
:
Когда пользователь выбирает этот режим, ему нужно сбросить() состояние EntityManager в базу данных, чтобы вручную увеличить поле версии. Таким образом, все остальные транзакции с оптимизацией будут аннулированы (откат). Проверка на версию также выполняется в конце транзакции для фиксации или откат транзакции.
Кажется ясным, но когда следует использовать режимы OPTIMISTIC
или OPTIMISTIC_FORCE_INCREMENT
? Единственный критерий, который я вижу, заключается в применении режима OPTIMISTIC_FORCE_INCREMENT
, когда я хочу, чтобы транзакция имела приоритет над другими, потому что выбор этого режима откатит все остальные, выполняющие транзакции (если я хорошо понимаю меканизм).
Есть ли другая (-а) причина (ы), чтобы выбрать этот режим, а не OPTIMISTIC
режим?
Спасибо