Wie kann ich das beheben, den N+1 Selects problem?
Ich habe Schwierigkeiten zu verstehen, wie zu vermeiden, die n+1 wählen Sie in jpa oder hibernate.
Aus, was ich lese, es gibt die "left join fetch", aber ich bin mir nicht sicher, ob es noch funktioniert mit mehr als einer Liste (oneToMany)..
Könnte jemand es mir erklären oder mir ein link geben mit einer klaren vollständige Erklärung bitte ?
Tut mir Leid wenn das eine noob Frage ist, aber ich kann nicht finden, eine wirklich klare Artikel oder doc zu diesem Thema.
Dank
Das Verständnis dieses problem ist von entscheidender Bedeutung für die Arbeit mit Hibernate. Ich habe auch entwickelt sich eine kleine librry für identiying dieses Problem in unit-tests: github.com/bedrin/jdbc-sniffer
InformationsquelleAutor Maxime ARNSTAMM | 2010-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abgesehen von der Verknüpfung, können Sie auch untergeordneten select-Anweisung(en). Diese Ergebnisse in 2 Abfragen ausgeführt werden (oder im Allgemeinen m + 1, wenn Sie m Listen), aber es skaliert gut für eine große Zahl von Listen zu, im Gegensatz zu join-fetching.
Mit join-fetching, wenn du da 2 Tabellen (oder Listen), die mit Ihrer Person, erhalten Sie eine kartesische Produkt, d.h. alle Kombinationen von Paaren von Zeilen aus den beiden Tabellen. Wenn die Tabellen groß sind, können Sie das Ergebnis riesige, z.B. wenn beide Tabellen über 1000 Zeilen, die das kartesische Produkt enthält 1 million Zeilen!
Bessere alternative für solche Fälle ist die Verwendung von subselects. In diesem Fall würden Sie Ausgabe 2 wählt - einen für jede Tabelle - auf der Oberseite des Haupt-select (die Lasten der übergeordneten Entität), so dass insgesamt laden Sie 1 + 100 + 100 Zeilen mit 3 Abfragen.
Für die Aufnahme, das gleiche mit lazy loading führen würde, 201 separate wählt, jedes laden einer einzelnen Zeile.
Update: hier sind einige Beispiele:
Ich habe ein paar links, hoffe, diese Hilfe 🙂
cool danke, ich kann damit arbeiten 🙂
InformationsquelleAutor Péter Török