Ich habe einige Szenarien, in denen der Server Objekte aus der Datenbank mithilfe von JPA abfragt und dann die Objekte über Webdienste an den Client sendet.
Da der Client in solchen Szenarien den vollständigen Graphen erwartet, würde ich die Lazy Loaded Collections mit dem Eager Loading überschreiben und wahrscheinlich einen Batch Laden (für die Performance) anfordern. Gibt es in JPA (oder EclipseLink) eine Möglichkeit, die Abfrage in generischer Weise zu überschreiben (ohne die Abfrage neu zu schreiben) und das vollständige Diagramm anzufordern?JPA-Abfrage erzwingen, um alle Sammlungen/Felder eifrig zurückzugeben
Antwort
Wenn Sie eclipselink verwenden, können Sie die integrierten Abfragehinweise verwenden. Auf diese Weise müssen Sie Ihre jpql nicht neu schreiben, aber Sie können den Abruftyp in Java definieren.
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Query_Hints#Join_Fetch
10.1.3. Fetch Joins
JPQL-Abfragen können eine oder mehrere Join-Fetch-Deklarationen angeben, mit denen die Abfrage angeben kann, welche Felder in den zurückgegebenen Instanzen im Voraus abgerufen werden.
SELECT x FROM Magazin x Join fetch x.articles WHERE x.title = 'JDJ'
Die obige Abfrage gibt Magazine-Instanzen zurück und garantiert, dass das articles-Feld bereits in den zurückgegebenen Instanzen abgerufen wird.
Mehrere Felder können in separaten beitreten holen Erklärungen angegeben werden:
SELECT x FROM Magazine x verbinden x.articles holen beitreten x.authors holen WHERE x.title = 'JDJ'