Junior — Middle
Hibernate'da verilerin eşzamanlı erişiminde çatışmaları önlemek için optimistik kilitleme mekanizması nasıl uygulanır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Оптимистичное блокирование в Hibernate реализуется с помощью аннотации @Version. Эта аннотация добавляет в сущность специальное поле (например, version), которое автоматически увеличивается при каждом обновлении записи. При сохранении Hibernate проверяет, что версия в базе совпадает с версией объекта, который обновляется. Если версии не совпадают, значит, данные были изменены другим транзакцией, и выбрасывается исключение OptimisticLockException.
Пример:
@Entity
public class Product {
@Id
private Long id;
@Version
private int version;
private String name;
private int quantity;
// геттеры и сеттеры
}
Таким образом, при одновременном доступе к одной записи, если один пользователь обновил данные, а другой пытается сохранить устаревшую версию, Hibernate обнаружит конфликт и предотвратит перезапись данных без учета изменений другого пользователя.