Sobes.tech
Junior — Middle

Jak implementovat mechanismus optimistického zámku v Hibernate pro prevenci konfliktů při současném přístupu k datům?

sobes.tech AI

Odpověď od AI

Optimistické uzamčení v Hibernate je implementováno pomocí anotace @Version. Tato anotace přidává do entity speciální pole (například version), které se automaticky zvyšuje při každé aktualizaci záznamu. Při ukládání Hibernate kontroluje, zda verze v databázi odpovídá verzi objektu, který se aktualizuje. Pokud se verze neshodují, znamená to, že data byla změněna jinou transakcí, a je vyhozena výjimka OptimisticLockException.

Příklad:

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

    @Version
    private int version;

    private String name;
    private int quantity;

    // getters a setters
}

Tímto způsobem Hibernate při současném přístupu ke stejnému záznamu, pokud jeden uživatel aktualizoval data a jiný se pokusí uložit zastaralou verzi, detekuje konflikt a zabrání přepsání dat bez ohledu na změny provedené jiným uživatelem.