Sobes.tech
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.