0

Я пытаюсь реализовать оптимистичную блокировку с помощью JPA. Я читал, что добавление одного дополнительного поля, версия с аннотацией @Version может использоваться для применения неявной оптимистической блокировки. После внедрения я смогу предотвратить потерянные обновления в случае, если несколько пользователей попытаются обновить один и тот же объект. Если какое-либо обновление сделано и если поле версии не совпадает с полем версии объекта, значит, объект был обновлен тем временем другим пользователем , то ни одна строка не обновляется, тем самым предотвращая потерянное обновление.Как узнать, обновлена ​​ли постоянная сущность? Spring Transaction Management

Я использую поддержку управления Spring Transaction, где для обновления объекта все, что мне нужно - обновлять поля Entity и обновление базы данных, бережно берется менеджером транзакций Spring, то есть я не должен явно вызывать запрос на обновление.

Мой вопрос в том, что, как бы я мог узнать, было ли успешным обновление, сделанное для конкретного пользователя?

ответ

0

OptimisticLockException будет выброшен, если операция была неудачной - если другая транзакция изменила объект ранее. Связанные темы для более подробной информации:

+0

Спасибо за ответ. Да, исключение OLE будет выбрано. Но мой вопрос заключался в том, что я пытаюсь использовать управление Spring Transaction, поэтому я не выполняю обновление или не передаю явно. Итак, как я могу поймать это исключение и предпринять соответствующие действия? –

+0

В соответствии с http://stackoverflow.com/questions/17203452/how-to-catch-optimisticlockexception-in-jpa можно обрабатывать внешний метод или вызвать сущность entityManager.flush() явно внутри. – Justas