Na warsztacie podstawowe elementy takie jak konfiguracja za pomocą XMLa, Entity Manager i Encje. Kto w tym towarzystwie zarządza Persistance Context?
Uwaga na wstępie. Nazewnictwo JPA i Hibernate od tego momentu będzie używane wymiennie. Już wiesz, że JPA to bardziej ogólne pojęcie i dotyczy standardu dla Javy, a Hibernate to jego implementacja.
Konfiguracja JPA
JPA konfigurujemy za pomocą XMLa, gdzie określamy połączenie z bazą danych (konkretny adres bazy danych, haslo, użytkownik itp.). Do tego służy plik persistence.xml.
Natomiast kolejną sprawą jest konfiguracja już konkretnych klas, których obiekty chcemy w bazie danych zapisywać. Program średniej wielkości składa się z kilkuset, a śmiało można powiedzieć, że i znacznie wiekszej ich ilości. Część z nich jest klasami pomocniczymi, których nie chcemy trzymać w bazie danych. Musimy więc po pierwsze oznaczyć w pewien sposób obiekty, których klas chcemy trzymać w bazie danych, a po drugie jak chcemy ją mapować.
Mapowanie
Za przykład posłuży String. Zmienną tego typu można mapować na kolumnę o danej nazwie, o danym typie (bo typu tekstowego w SQLu mamy bardzo dużo), możemy ustalić czy dane pole może przyjmować NULL czy ma być unikalne, jaką ma mieć długość.
Te wszystkie rzeczy musimy opisać za pomocą meta danych. Te meta dane również możemy trzymać w XMLu, aczkolwiek obecnie o wiele popularniejszą formą jest używanie adnotacji.
Adnotacje są to specjalne markery używane w konkretnych miejscach – w definicji klasy. Przykładową adnotacją jest @Entity, która musi być użyta przy nazwie klasy i oznacza, że obiekty danej klasy mają być zapisywanie do bazy danych.
Entity Manager
Na podstawie konfiguracji (czyli na podstawie XMLa konfigurującego połącznenie z bazą danych) oraz adnotacji jest tworzony Entity Manager, który zarządza czymś o nazwie Persistence Context.
Persistence Context (Kontekst persystencji) określa jakie obiekty są śledzone, zapisywane w bazie danych, jak w ogóle tworzymy zapytanie do bazy danych itp.
Pamiętajmy, że baz danych mamy wiele – np. H2, której będziemy tutaj używać bo jest wbudowaną bazą danych do tworzenia takich testowych projektów.
Entity Manager jest to jeden obiekt (Singleton), który jest najważniejszym w całej naszej persystencji za pomoca JPA.
W Entity Manager żyją sobie Encje…
Encje są to obiekty które zostały oznaczone za pomocą adnotacji @Entity.
Spróbujmy je zobrazować.
Mamy sobie klasę Gość obok klasy Pokój. Dodaję do nich adnotację @Entity. W tym momencie wskazuję, że te klasy są zapisywane do bazy danych, więc mogą być zarządzane przez Entity Managera. Manager zaczyna obserwować czy coś się z nimi dzieje. Jeśli na przykład zmienimy sobie w Encji zarządzanej przez Entity Managera wartoś jakiegoś pola (np. zmienimy imię Gościa) to wtedy Manager po zakończeniu sesji wprowadza tą zmianę do bazy danych.
Natomiast jeśli podczas jednej sesji zmienię imię Gościa z Pawła na Piotr, a póżniej w ramach tej samej sesji znowu cofnę je na Paweł to Entity Manager jest na tyle sprytny, że nie połączy się z bazą danych i nic w niej nie podmieni.
Każda próba połączenia z bazą danych powoduje pewną stratę czasu programu, a każdemu zależy żeby dzialal jak najszybciej i bez zbędnych opóźnień.
Podsumowanie
Konfiguracja określa rodzaj połączenia oraz rodzaj bazy danych.
Entity Manager zarządza Persistance Context (Persystencją Kontekstu) i jest głównodowodzącym w śledzeniu i zapisywaniu zmian jakich dokonujemy.
Encje są wskaźnikiem, którymi danymi interesuje się Entity Manager i oznaczane są za pomocą @Entity.
By być na bieżąco i mieć realny wpływ na tematykę tworzonych przeze mnie artykułów zapraszam do dołączenia do mojego newslettera.
Informacje oparte zostały o materiał darmowego kursu wprowadzającego w świat JPA i Hibernate „Fundamenty JPA i Hibernate” dostępnego w formie wideo na platformie ClockworkJava.