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.