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'
- 1. StoreKit, um alle Produkt IDs zurückzugeben
- 2. SQL, nur wenn alle Fremdschlüsselwerte übereinstimmen, um den Datensatz zurückzugeben?
- 3. LDAP-Abfrage, um alle Benutzer in einer Gruppe zurückzugeben
- 4. Linq, um alle Paare von Elementen aus zwei Listen zurückzugeben?
- 5. Gibt es eine Funktion, um alle Buchstabenfarben in Matplotlib zurückzugeben?
- 6. Erzwingen Sie Google-Suchen, um Ergebnisse ohne die Suchbegriffe nicht zurückzugeben
- 7. Erzwingen RecyclerView.Adapter, um onBindViewHolder() für alle Elemente aufzurufen
- 8. AngularJS-Dienst erzwingen, um Daten vor dem Laden des Controllers zurückzugeben
- 9. R: Erzwingen data.table alle Interaktionen
- 10. Erzwingen alle https via .htaccess
- 11. Benötigen SQL-Abfrage, um verschiedene Daten zurückzugeben
- 12. Laravel/Eloquent eifrig laden
- 13. Reduzieren Spark RDD, um mehrere Werte zurückzugeben
- 14. Methode, um jedes Objekt als Selbstobjekt zurückzugeben
- 15. TableAdapter, um nur ausgewählte Spalten zurückzugeben? (VS2008)
- 16. Laravel 4.1 eifrig laden
- 17. Wie behandelt man WebFaultException, um CustomException zurückzugeben?
- 18. Hibernate @ManyToMany bidirektionale eifrig holen
- 19. Erhalten einer Funktion, um zwei Ganzzahlen zurückzugeben
- 20. indexOf() -Funktion, um einen Wert -1 zurückzugeben
- 21. SQLAlchemy-Abfrage, um nur n Ergebnisse zurückzugeben?
- 22. Force information_schema.tables, um nach Tabellenname sortiert zurückzugeben?
- 23. d3: Sucheingabe, um verschachtelten Datenwert zurückzugeben
- 24. Active Directory-Filter, um inaktive Benutzer zurückzugeben
- 25. Welchen http-Code, um in ListAPIView zurückzugeben?
- 26. Array append(), um ein neues Array zurückzugeben
- 27. Hierarchische Abfrage, um die letzte Zeile zurückzugeben
- 28. foreach in Methode, um Wert zurückzugeben
- 29. SQL-Bedingung, um bestimmten Datumsbereich zurückzugeben
- 30. NHibernate Sammlung eifrig laden nehmen