Mam kilka scenariuszy, w których serwer odpytuje obiekty z bazy danych za pomocą JPA, a następnie wysyła obiekty do klienta za pośrednictwem usług internetowych.
Ponieważ klient spodziewa się pełnego wykresu w takich scenariuszach, chciałbym przesłonić leniwy załadowanych kolekcji z chętnym ładowaniem i prawdopodobnie żądanie ładowania wsadowego (dla wydajności). Czy istnieje sposób w JPA (lub EclipseLink), aby przesłonić zapytanie w sposób ogólny (bez przepisywania zapytania) i zażądać pełnego wykresu?Wymuszanie zapytania JPA, aby zwrócić z niecierpliwością wszystkie kolekcje/pola
Odpowiedz
Jeśli używasz eclipselink, możesz użyć wbudowanych wskazówek dotyczących zapytań. W ten sposób nie musisz przepisywać jpql, ale możesz zdefiniować typ pobierania w java.
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Query_Hints#Join_Fetch
10.1.3. Fetch Joins
Zapytania JPQL mogą określać jedno lub więcej deklaracji sprzężenia, które pozwalają na określenie, które pola w zwróconych wystąpieniach będą wstępnie pobrane.
SELECT x FROM Magazine x join pobierz x.articles WHERE x.title = 'JDJ'
Powyższe zapytanie zwraca instancje czasopisma i gwarantuje, że pole artykułów zostanie już pobrane w zwróconych wystąpieniach.
Wiele pól może być określone w odrębnych dołączyć pobrać deklaracje:
SELECT x FROM Magazine x dołączyć pobierające x.articles dołączyć sprowadzić x.authors GDZIE x.title = 'JDJ'