org.springframework.orm.ObjectOptimisticLockingFailureException - PullRequest
0 голосов
/ 21 октября 2019

При попытке вставить в базу данных Iam становится ниже Stack Trace -

StackTrace ":" org.springframework.orm.ObjectOptimisticLockingFailureException: пакетное обновление вернуло неожиданное количество строк из обновления [0];фактическое количество строк: 0;ожидается: 1;вложенным исключением является org.hibernate.StaleStateException: пакетное обновление вернуло неожиданное количество строк из обновления [0];Фактическое количество строк: 0

Любая идея, почему мы получаем это исключение и разрешение. Эта проблема возникает периодически, и я не наблюдаю ее каждый раз, когда обращаюсь к себе на службу.

1 Ответ

0 голосов
/ 21 октября 2019

Идея ObjectOptimisticLockingFailureException заключается в следующем:

Допустим, у вас есть многопоточный процесс, который должен удалить количество записей в вашей базе данных.

Каждый поток выполняеттот же код, например:

Foo foo = repository.findById(id);
reposiroty.delete(foo);

Допустим, что нить A нашла Foo сущность по id = 1, а до нить A достигла reposiroty.delete(foo);, нить B также приобрела Foo сущность с id = 1.

Так что после Foo с id = 1 удаляется нить A , поток B попытается сделать то же самое, но, поскольку Foo с id = 1 уже будет удален, поток B будет выбрасывать ObjectOptimisticLockingFailureException.

Следовательно, поток B надеялся удалить полученный объект, но этот объект уже был удален к тому времени, когда поток B фактически начал выполнять удаление.

Как вариант, вы можете перехватить ObjectOptimisticLockingFailureException и реализовать некоторую логику на основе этого сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...