Как да реализирам механизъм за оптимистично блокиране в Hibernate, за да предотвратя конфликти при едновременен достъп до данните?
sobes.tech AI
Отговор от 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 ще открие конфликта и ще предотврати презаписването на данните без да взема предвид промените на другия потребител.