Sobes.tech
Junior — Middle

Jak zaimplementować mechanizm optymistycznego blokowania w Hibernate, aby zapobiec konfliktom podczas jednoczesnego dostępu do danych?

sobes.tech AI

Odpowiedź od AI

Optymistyczne blokowanie w Hibernate jest realizowane za pomocą adnotacji @Version. Ta adnotacja dodaje do encji specjalne pole (np. version), które jest automatycznie zwiększane przy każdej aktualizacji rekordu. Podczas zapisywania Hibernate sprawdza, czy wersja w bazie danych zgadza się z wersją obiektu, który jest aktualizowany. Jeśli wersje się nie zgadzają, oznacza to, że dane zostały zmienione przez inną transakcję, i zostaje wyrzucony wyjątek OptimisticLockException.

Przykład:

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

    @Version
    private int version;

    private String name;
    private int quantity;

    // gettery i settery
}

W ten sposób, podczas jednoczesnego dostępu do tego samego rekordu, jeśli jeden użytkownik zaktualizuje dane, a inny spróbuje zapisać nieaktualną wersję, Hibernate wykryje konflikt i zapobiegnie nadpisaniu danych bez uwzględnienia zmian dokonanych przez innego użytkownika.