ZAWWW-2st1.2-w05.tresc-1.0--Slajd30

Z Studia Informatyczne
Wersja z dnia 17:47, 31 sie 2006 autorstwa Juliusz Jezierski (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Odczyt, odświeżanie i synchronizacja instancji encji z bazą danych

Odczyt, odświeżanie i synchronizacja instancji encji z bazą danych


Do odczytu instancji encji poprzez klucz główny służy metoda find() obiektu EntityManager. Inna możliwość odczytu danych z bazy danych to realizacja zapytań, co będzie omówione na kolejnych slajdach.

Po odczytaniu instancji encji z bazy danych można odświeżyć jej stan poprzez ponowny odczyt z bazy danych metodą refresh() obiektu EntityManager. Operacja refresh() powoduje anulowanie zmian dokonanych na instancji w pamięci. Jeśli odświeżana instancja encji jest powiązana związkiem z inną instancją encji i związek posiada własność kaskady REFRESH lub ALL, również związana instancja encji zostanie automatycznie odświeżona poprzez odczyt z bazy danych.

Obiekt EntityManager nie posiada metod do modyfikacji instancji encji. Modyfikacje te są dokonywane metodami setXXX() encji. Jeśli instancja encji była modyfikowana w stanie odłączonym, np. po przekazaniu jej do innej warstwy aplikacji, do synchronizacji jej stanu z bazą danych służy metoda merge() obiektu EntityManager. Jeśli synchronizowana instancja encji jest powiązana związkiem z inną instancją encji i związek posiada własność kaskady MERGE lub ALL, również związana instancja encji zostanie automatycznie zsynchronizowana z bazą danych.

Domyślnie dokonane zmiany są zapisywane w bazie danych gdy transakcja jest zatwierdzana. Gdy aplikacja tego wymaga, gdyż np. dalszy kod polega na fizycznej obecności zmodyfikowanych danych w bazie danych, można wymusić wcześniejszy zapis danych do bazy danych metodą flush() obiektu EntityManager. Jeśli zapisywana instancja encji jest powiązana związkiem z inną instancją encji i związek posiada własność kaskady PERSIST lub ALL, również związana instancja encji zostanie automatycznie zapisana w bazie danych.

Java Persistence domyślnie stosuje blokowanie optymistyczne. Istnieje możliwość jawnego zakładania blokad do odczytu i zapisu metodą lock() obiektu EntityManager.


<< Poprzedni slajd | Spis treści | Następny slajd >>