Aby przystąpić do laboratorium należy posiadać implementację części 1.
Aby przygtować zestaw CRUD (Create, Read, Update, Delete) należy w sposób właściwy ustawić adnotacje relacji. Dla klasy PersonEntity istotna jest adnotacja dla pola addressInfosByPId. Należy ją ustawić według poniższego kodu:
CascadeType.ALL wymusza zastosowanie wszystkich zdarzeń persystencji na obiektach dziecka jeżeli zdarzenie występuje na rodzicu. FetchType.EAGER wymusza załadowanie danych, gdy zostaje wykonane zapytanie pobierające nadrzędną część relacji.
Dla klasy AddressInfoEntity adnotacja relacji powinna przybrać następujący sposób:
FetchType.LAZY- leniwie ładuje dane.
Ponieważ w ostatnim laboratorium środowisko wygenerowała podwójnie relację ManyToOne należy na potrzebę wykonania poleceń tej instrukcji usunąć tę polegającą na przechowywaniu klucza obcego za pomocą liczby w klasie AddressInfoEntity. Będzie to również wymagać modyfikacji części metod.
CREATE
Należy rozważyć następującą konstrukcję kodu:
Jego wykonanie utrwali zarówno dane osobowe jak i dane adresowe dla osoby. Framework sam utworzy wiersze w tabeli address_info pomimo wykonania persist jedynie dla person.
READ
Za pomocą adnotacji @NamedQuery należy utworzyć zapytanie nazwane:
Zapytanie to posiada nazwę PersonEntity.ByTown, a jego parametrem jest nazwa miasta. Dzięki konstrukcji składniowej można zauważyć, że parametrem jest nazwa miasta. Zapytanie zwraca wszystkie osoby zamieszkałe w danym mieście.
Wykonanie tego zapytania ukazuje powyższy kod. Po jego wykonaniu dzięki właściwie zaimplementowanym metodom toString() działanie jest następujące:
UPDATE
Zmienia Majora Suchodolskiego na Majora Bombę.
DELETE
Usuwa Majora Bombę (wraz z adresami).
ZADANIE
Zaimplementować rozwiązanie umożliwiające iteracyjne dodawanie, odczyt, modyfikację oraz usuwanie danych osobowych oraz adresowych z bazy danych. Przy przeszukiwaniu wykorzystać zapytania nazwane. Umożliwić filtrowanie po imieniu, nazwisku, województwie, kraju, mieście oraz adresowi mailowemu.