Restful zasoby nie zawsze mają odwzorowanie typu jeden-do-jednego z jednostkami jpa. Jak widzę, jest kilka problemów, które próbuję wymyślić, jak obsługiwać:Co to jest dobra strategia przekształcania podmiotów jpa w zasoby restrykcyjne
- Gdy zasób zawiera informacje zapełnione i zapisane przez więcej niż jeden obiekt.
- Gdy jednostka zawiera więcej informacji, które chcesz wysłać jako zasób. Mogę po prostu użyć Jackson'a
@JsonIgnore
, ale nadal będę miał numer 1, 3 i 4. - Kiedy jednostka (jak zagregowany root) ma zagnieżdżone byty i chcesz dołączyć część zagnieżdżonych elementów, ale tylko do pewnego poziomu zagnieżdżanie jako zasób.
- Jeśli chcesz wykluczyć jeden element podmiotu, gdy jest on częścią jednej jednostki nadrzędnej, ale wyklucza oddzielny element, gdy jest częścią innej jednostki nadrzędnej.
- Blasted referencje okrągłe (mam to przede wszystkim praca z JSOG użyciu
@JsonIdentityInfo
Jacksona)
Możliwe rozwiązania: Jedynym sposobem mogę myśleć, że będzie obsługiwać wszystkie te kwestie będą tworzyć całość pęczek klas "zasobów", które miałyby konstruktorów, którzy wzięli potrzebne jednostki do zbudowania zasobu i wstawili niezbędne moduły pobierające i ustawiające dla tego zasobu. Czy to przesada?
Aby rozwiązać 2, 3, 4 i 5, mógłbym po prostu zrobić pewne przetwarzanie przed i po rzeczywistym obiekcie przed wysłaniem go do Jacksona, aby przekształcić do postaci szeregowej lub deserializować mój program do JSON, ale to nie rozwiązuje problemu 1.
Są to wszystkie problemy, które myślę, że inni by się zetknęli i jestem ciekawy, jakie rozwiązania mogą wymyślić inni ludzie. (Obecnie używam JPA 2, Spring MVC, Jackson i Spring-Data, ale jestem otwarty na inne technologie)
Dziękujemy za szczegółową odpowiedź. Kiedy po raz pierwszy zobaczyłem to, widziałem kilka osób, które wspomniały DTO jako możliwe rozwiązanie, ale często pojawiały się komentarze zaraz po stwierdzeniu, że nie powinieneś dodawać kolejnej warstwy. Wygląda na to, że nie stworzysz DTO dla wszystkich swoich jednostek, gdy potrzebujesz zasobu, który nie jest mapowaniem jednostki istniejącego jpa na jeden do jednego. Czy to prawda? – testing123
Zgadza się. Proste modele obiektów, zwłaszcza te z relacjami jednokierunkowymi, a gdzie głębokość wykresu obiektów wynosi nie więcej niż 2, skorzystają z bezpośredniego odwzorowania między jednostkami JPA i zasobami REST. Jednak w realnym świecie nie widziałem wielu przykładów takich modeli. –
Jako kontynuację, używam wzoru DTO już od jakiegoś czasu i oni byli całkowicie drogą do zrobienia. Jeszcze raz dziękuję za twoje przemyślenia :) – testing123