Если два потока в разных persistence contexts меняют одну строку без контроля версии, возможно потерянное обновление. @Version позволяет обнаружить конфликт, а pessimistic lock — сериализовать доступ.
Что будет, если два потока параллельно читают одну сущность и пытаются её изменить в Hibernate?
Если два потока в разных persistence contexts меняют одну строку без контроля версии, возможно потерянное обновление. @Version позволяет обнаружить конфликт, а pessimistic lock — сериализовать доступ.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Если два потока в разных persistence contexts меняют одну строку без контроля версии, возможно потерянное обновление. @Version позволяет обнаружить конфликт, а pessimistic lock — сериализовать доступ.
С @Version UPDATE проверяет исходную версию; при конфликте одна транзакция должна завершиться ошибкой и быть повторена либо показана пользователю. Пессимистическая блокировка требует короткой транзакции и аккуратного порядка locks. Session/EntityManager не следует одновременно использовать из разных потоков. Точное поведение также зависит от изоляции БД и того, какие поля реально обновляет запрос.