Идея 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
и реализовать некоторую логику на основе этого сценария.