Sobes.tech
Junior — Middle

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