Sobes.tech
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.