Sobes.tech
Junior — Middle

Kaip įgyvendinti optimistinio užrakinimo mechanizmą Hibernate, siekiant išvengti konfliktų dėl vienalaikio duomenų prieigos?

sobes.tech AI

Atsakymas iš AI

Optimistinis užraktas Hibernate įgyvendinamas naudojant @Version anotaciją. Ši anotacija prideda prie entiteto specialų lauką (pvz., version), kuris automatiškai padidėja kiekvieno įrašo atnaujinimo metu. Išsaugant, Hibernate patikrina, ar duomenų bazės versija sutampa su atnaujinamo objekto versija. Jei versijos nesutampa, tai reiškia, kad duomenys buvo pakeisti kitos transakcijos, ir išmetama išimtis OptimisticLockException.

Pavyzdys:

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

    @Version
    private int version;

    private String name;
    private int quantity;

    // getteriai ir setteriai
}

Taip, vienu metu prie to paties įrašo gali būti keli naudotojai, ir jei vienas atnaujina duomenis, o kitas bando išsaugoti pasenusią versiją, Hibernate aptiks konfliktą ir užkirs kelią duomenų perrašymui be kito naudotojo pakeitimų apsvarstymo.