Ответ 1
Я могу сделать это, просто загрузив объект, увеличивая значение и обновление объекта, однако, если другое поток приходит и обновляет поле между нагрузкой и обновить, тогда значение станет поврежден.
Если второй поток также использует hibernate, и вы используете hibernate versioning (@Version) тот самый поток, который совершает первый и изменяет объект, будет устанавливать новую версию на объект.
Когда вступает вторая фиксация потока, hibernate проверяет, не блокирует ли оптимизатор блокировки и генерирует исключение - исключение StaleObjectException, если я не ошибаюсь. Будет ли блок catch вокруг вашего параллельного кода, у вас будет возможность снова загрузить объект и попробовать свое обновление, если это имеет смысл. Если вы используете JPA, будет выбрано исключение OptimisticLockException.
В разделе содержится информация о загрузке спящего режима Оптимистичная Concurrency.
Ура!