Sobes.tech
Junior — Middle

Kuidas rakendada Hibernate'is optimistliku lukustamise mehhanismi andmetele samaaegse juurdepääsu konfliktide vältimiseks?

sobes.tech AI

Vastus AI-lt

Optsimistliku lukustuse Hibernate'is rakendatakse @Version annotatsiooni abil. See annotatsioon lisab entiteedile spetsiaalse välja (näiteks version), mis automaatselt suureneb iga kirje uuendamisel. Salvestamisel kontrollib Hibernate, kas andmebaasis olev versioon vastab uuendatava objekti versioonile. Kui versioonid ei kattu, tähendab see, et andmeid on muudetud teise tehingu poolt, ja visatakse välja OptimisticLockException.

Näide:

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

    @Version
    private int version;

    private String name;
    private int quantity;

    // getterid ja setterid
}

Nii, sama kirje juurde pääsemisel samaaegselt, kui üks kasutaja uuendab andmeid ja teine üritab salvestada vananenud versiooni, tuvastab Hibernate konflikti ja takistab andmete üle kirjutamist ilma teise kasutaja muudatusi arvesse võtmata.