Hibernate Tranzakcyjno i bezpieczestwo danych Transakcja Session session
Hibernate Tranzakcyjność i bezpieczeństwo danych
Transakcja Session session = factory. open. Session(); try { session. get. Transaction(). set. Timeout(3); session. get. Transaction(). begin(); session. get. Transaction(). commit(); } catch (Runtime. Exception e) { session. get. Transaction(). rollback(); throw e; } finally {session. close(); } 2
@ Transactional @Transactional ( propagation=Propagation. REQUIRED, isolation=Isolation. SERIALIZABLE, timeout = 3, read. Only = false ) 3
Propagation NEVER - bez transakcji lub rzuca wyjątkiem NOT_SUPPORTED - bez transakcji lub zawiesza aktualną SUPPORTS - wspiera bieżącą lub bez transakcji MANDATORY - wspiera bieżącą lub rzuca wyjątkiem REQUIRED - wspiera bieżącą lub tworzy nową REQUIRES_NEW - tworzy nową i zawiesza bieżącą 4
Izolacja hibernate. connection. isolation = 4 1—Read uncommitted isolation 2—Read committed isolation 4—Repeatable read isolation 8—Serializable isolation 5
Izolacja 6
Lock. Mode. NONE Lock. Mode. READ Lock. Mode. UPDGRADE_NOWAIT Lock. Mode. WRITE 7
Lock. Mode Session. load(entity. Class, id, Lock. Mode. UPGRADE_NOWAIT); Session. lock(Object, lock. Mode. READ); Query. set. Lock. Mode(lock. Mode. WRITE); 8
Lock. Mode Transaction tx = session. begin. Transaction(); Uzytkownik uzytkownik = (Uzytkownik) session. get(Uzytkownik. class, id, Lock. Mode. UPGRADE); uzytkownik. set. Imie(”Marek"); tx. commit(); 9
Tryby synchronizacji danych • Flush. Mode. AUTO (domyślny) - flush(), koniec transakcji, niektóre zapytania • Flush. Mode. COMMIT - flush(), koniec transakcji • Flush. Mode. NEVER - flush() 10
Optymistic. Lock • Oparty o dodatkowe pole z adnotacją version @Version int optlock; • Nieograniczony dostęp do czytania danych • Przy próbie zapisu obiektu sprawdzany numer wersji 11
- Slides: 11