Sobes.tech
Junior — Middle

Hogyan valósítható meg az optimista zárolási mechanizmus Hibernate-ben az adatok egyidejű hozzáférésekor fellépő konfliktusok elkerülése érdekében?

sobes.tech MI

Válasz az MI-től

A Hibernate-ben az optimista zárolás az @Version annotáció segítségével valósítható meg. Ez az annotáció egy speciális mezőt (például version) ad az entitáshoz, amely automatikusan növekszik minden rekord frissítésekor. Mentéskor a Hibernate ellenőrzi, hogy az adatbázisban lévő verzió megegyezik-e a frissített objektum verziójával. Ha nem egyeznek, az azt jelenti, hogy az adatokat egy másik tranzakció módosította, és OptimisticLockException kivétel keletkezik.

Példa:

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

    @Version
    private int version;

    private String name;
    private int quantity;

    // getterek és setterek
}

Így, ha ugyanazon rekordhoz több felhasználó egyidejűleg hozzáfér, és egyikük frissíti az adatokat, míg a másik megpróbálja elmenteni a régi verziót, a Hibernate észleli a konfliktust, és megakadályozza az adatok felülírását anélkül, hogy figyelembe venné a másik felhasználó módosításait.