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.