Junior — Middle
Ako implementovať mechanizmus optimistického zámku v Hibernate pre prevenciu konfliktov pri súčasnom prístupe k údajom?
sobes.tech AI
Odpoveď od AI
Optimistické uzamknutie v Hibernate sa implementuje pomocou anotácie @Version. Táto anotácia pridáva do entity špeciálne pole (napríklad version), ktoré sa automaticky zvyšuje pri každej aktualizácii záznamu. Pri ukladaní Hibernate kontroluje, či verzia v databáze zodpovedá verzii objektu, ktorý sa aktualizuje. Ak sa verzie nezhodujú, znamená to, že údaje boli zmenené inou transakciou, a je vyhodená výnimka OptimisticLockException.
Príklad:
@Entity
public class Product {
@Id
private Long id;
@Version
private int version;
private String name;
private int quantity;
// getters a setters
}
Týmto spôsobom Hibernate pri súčasnom prístupe ku rovnakému záznamu, ak jeden používateľ aktualizoval údaje a iný sa pokúsi uložiť zastaranú verziu, deteguje konflikt a zabráni prepísaniu údajov bez ohľadu na zmeny vykonané iným používateľom.