Sobes.tech
Назад к вопросам
Junior — Middle
63

Каким образом реализовать механизм оптимистичного блокирования в Hibernate для предотвращения конфликтов при одновременном доступе к данным?

Компании, где спрашивали
DCloud

Ответ от нейросети

sobes.tech AI

Оптимистичное блокирование в Hibernate реализуется с помощью аннотации @Version. Эта аннотация добавляет в сущность специальное поле (например, version), которое автоматически увеличивается при каждом обновлении записи. При сохранении Hibernate проверяет, что версия в базе совпадает с версией объекта, который обновляется. Если версии не совпадают, значит, данные были изменены другим транзакцией, и выбрасывается исключение OptimisticLockException.

Пример:

@Entity
public class Product {
    @Id
    private Long id;

    @Version
    private int version;

    private String name;
    private int quantity;

    // геттеры и сеттеры
}

Таким образом, при одновременном доступе к одной записи, если один пользователь обновил данные, а другой пытается сохранить устаревшую версию, Hibernate обнаружит конфликт и предотвратит перезапись данных без учета изменений другого пользователя.