Anotace @Version v JPA

Sloupec s touto anotací bude navýšen (jeho hodnota) v případě update entity. Pokud hodnoty zůstávají stejné, po update se verze nezvyšuje. Pokud načteme entitu v jednom vlákně a v jiném vlákně ji updatujeme, tak poté v tom prvním vlákně při ukládání dostaneme

Exception in thread "main" javax.persistence.OptimisticLockException: 
Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)

Vygenerovaný update má ve where podmínce verzi

update
    t_book 
set
    description=?,
    pages=?,
    version=? 
where
    id=? 
    and version=?

Optimistické zamykání:
Umožňuje více uživatelům přístup k databázi zároveň, zatímco systém udržuje původní kopii pro každého uživatele. Když chce uživatel aktualizovat záznam, aplikace zjistí, jestli jiný uživatel změnil záznam od posledního čtení. Aplikace porovná původní kopii uloženou v paměti a záznam v databázi a ověří všechny změny provedené v záznamu. Jakékoli rozdíly mezi původní kopií a databázovým záznamem naruší souběžnost pravidla a tím způsobí, že systém nepřihlédne k žádné žádosti aktualizace. Je vygenerována chybová zpráva a uživatel je vyzván k procesu znovu aktualizace. Zlepšuje výkon databáze tím, že redukuje množství požadovaných zamknutí, čímž se sníží zátěž na databázový server. Pracuje efektivně s tabulkami, které vyžadují omezené aktualizace od uživatelů, které jsou blokovány. Nicméně, některé aktualizace mohou selhat.
wikipedie

Napsat komentář