Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: optimistic, locking

Каким образом реализуется optimistic locking в JPA?

Вопрос проверяет знание практической реализации optimistic locking в JPA и понимание того, как ORM предотвращает потерю обновлений.

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

В JPA optimistic locking реализуется с помощью поля версии. Это поле помечается аннотацией @Version. При каждом обновлении сущности версия увеличивается. Если при сохранении версия в базе отличается от версии в объекте, JPA выбрасывает исключение. Таким образом предотвращается перезапись чужих изменений.

Длинный ответ

Optimistic locking в JPA встроен на уровне ORM и не требует явной работы с блокировками в SQL.

Определение

Optimistic locking в JPA — это механизм контроля конкурентных изменений, основанный на проверке версии сущности при выполнении UPDATE.

Как работает механизм версий

Перед тем как разобрать шаги, важно понять ключевую идею: каждая строка хранит номер версии.

Основные шаги

  1. Сущность загружается из базы вместе с полем версии

  2. Приложение изменяет объект

  3. При flush или commit Hibernate формирует UPDATE с условием по версии

  4. Если обновлено 0 строк — считается конфликт версий

Пример сущности

@Entity
public class Order {

    @Id
    private Long id;

    @Version
    private Long version;

    private String status;
}

Что происходит на уровне SQL (идея)

  1. UPDATE orders SET status = ?, version = version + 1 WHERE id = ? AND version = ?

  2. Если версия не совпала — обновление не происходит

Исключения и обработка

  1. Hibernate выбрасывает OptimisticLockException

  2. Приложение решает, что делать дальше:

    • повторить операцию

    • показать ошибку пользователю

    • отменить бизнес-операцию

Краткий вывод

Optimistic locking в JPA прост в использовании, хорошо масштабируется и подходит для большинства бизнес-сценариев с редкими конфликтами.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#optimistic

#locking

Подпишись на Java Developer в телеграм