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.