Junior — Middle
Kako implementirati mehanizam optimističkog zaključavanja u Hibernate-u za sprečavanje konflikata pri istovremenom pristupu podacima?
sobes.tech АИ
Одговор од АИ
Optimistično zaključavanje u Hibernate-u se implementira pomoću anotacije @Version. Ova anotacija dodaje poseban atribut (npr. version) entitetu, koji se automatski povećava pri svakoj ažuriranju zapisa. Prilikom čuvanja, Hibernate proverava da li se verzija u bazi podataka poklapa sa verzijom objekta koji se ažurira. Ako se verzije ne poklapaju, to znači da su podaci izmenjeni od strane druge transakcije, i baca se izuzetak OptimisticLockException.
Primer:
@Entity
public class Product {
@Id
private Long id;
@Version
private int version;
private String name;
private int quantity;
// getteri i setteri
}
Na ovaj način, pri istovremenom pristupu istoj evidenciji, ako je jedan korisnik ažurirao podatke, a drugi pokušava da sačuva zastarelu verziju, Hibernate će detektovati konflikt i sprečiti prepisivanje podataka bez uzimanja u obzir promena drugog korisnika.