Hibernate = zapytania

Download Report

Transcript Hibernate = zapytania

Odwzorowania relacyjno-obiektowe
Hibernate
Tranzakcyjność i
bezpieczeństwo
danych
Odwzorowania relacyjno-obiektowe
Transakcja
Session session = factory.openSession();
try {
session.getTransaction().setTimeout(3);
session.getTransaction().begin();
session.getTransaction().commit();
}
catch (RuntimeException e) {
session.getTransaction().rollback();
throw e;
}
finally {session.close();}
2
Odwzorowania relacyjno-obiektowe
@ Transactional
@Transactional
(
propagation=Propagation.REQUIRED,
isolation=Isolation.SERIALIZABLE,
timeout = 3,
readOnly = false
)
3
Odwzorowania relacyjno-obiektowe
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
Odwzorowania relacyjno-obiektowe
Izolacja
• hibernate.connection.isolation = 4
•
•
•
•
1—Read uncommitted isolation
2—Read committed isolation
4—Repeatable read isolation
8—Serializable isolation
5
Odwzorowania relacyjno-obiektowe
Izolacja
6
Odwzorowania relacyjno-obiektowe
OptymisticLock
• Oparty o dodatkowe pole z adnotacją version
@Version
int optlock;
• Nieograniczony dostęp do czytania danych
• Przy próbie zapisu obiektu sprawdzany numer
wersji
7
Odwzorowania relacyjno-obiektowe
LockMode
•
•
•
•
•
LockMode.NONE
LockMode.READ
LockMode.UPDGRADE
LockMode.UPDGRADE_NOWAIT
LockMode.WRITE
8
Odwzorowania relacyjno-obiektowe
LockMode
Session. load(entityClass, id,
LockMode.UPGRADE_NOWAIT);
Session. lock(Object, lockMode.READ);
Query.setLockMode(lockMode.WRITE);
9
Odwzorowania relacyjno-obiektowe
LockMode
Transaction tx = session.beginTransaction();
Uzytkownik uzytkownik =
(Uzytkownik) session.get(Uzytkownik.class, id,
LockMode.UPGRADE);
uzytkownik.setImie(”Marek");
tx.commit();
10
Odwzorowania relacyjno-obiektowe
Tryby synchronizacji danych
• FlushMode.AUTO (domyślny) - flush(), koniec
transakcji, niektóre zapytania
• FlushMode.COMMIT - flush(), koniec transakcji
• FlushMode.NEVER - flush()
11