Назад к вопросам
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 обнаружит конфликт и предотвратит перезапись данных без учета изменений другого пользователя.