Что будет, если два потока параллельно читают одну сущность и пытаются её изменить в Hibernate?

Если два потока в разных persistence contexts меняют одну строку без контроля версии, возможно потерянное обновление. @Version позволяет обнаружить конфликт, а pessimistic lock — сериализовать доступ.

Короткий ответ

Что ответить на собеседовании

Если два потока в разных persistence contexts меняют одну строку без контроля версии, возможно потерянное обновление. @Version позволяет обнаружить конфликт, а pessimistic lock — сериализовать доступ.

Подробный разбор

Ответ с пояснениями

Если два потока в разных persistence contexts меняют одну строку без контроля версии, возможно потерянное обновление. @Version позволяет обнаружить конфликт, а pessimistic lock — сериализовать доступ.

С @Version UPDATE проверяет исходную версию; при конфликте одна транзакция должна завершиться ошибкой и быть повторена либо показана пользователю. Пессимистическая блокировка требует короткой транзакции и аккуратного порядка locks. Session/EntityManager не следует одновременно использовать из разных потоков. Точное поведение также зависит от изоляции БД и того, какие поля реально обновляет запрос.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее