Wie mache ich ein "tief" fetch Joins in JPQL?

Ich glaube nicht, dass ich jemals vollständig zu verstehen, fetch-joins.

Ich habe eine Abfrage, wo ich bin versucht zu eifrig "aufblasen" bezieht sich auf zwei Ebenen.

Ist, meine A hat eine optionale Collection von Bs, und jeder B hat entweder 0 oder 1 C. Die Größe der B Sammlung bekannt ist, klein zu sein (10-20 tops). Ich möchte prefetch dieses Diagramm.

A's B Beziehung gekennzeichnet ist, als FetchType.LAZY und ist optional. B's Beziehung zu C ist ebenfalls optional und FetchType.LAZY.

Ich hatte gehofft, ich könnte tun:

SELECT a 
  FROM A a
  LEFT JOIN FETCH a.bs //look, no alias; JPQL forbids it
  LEFT JOIN a.bs b //"repeated" join necessary since you can't alias fetch joins
  LEFT JOIN FETCH b.c //this doesn't seem to do anything
 WHERE a.id = :id

Wenn ich diese ausführe, sehe ich, dass As B Sammlung ist in der Tat geholt (ich sehe ein LEFT JOIN im SQL referenzieren der Tabelle, um die B zugeordnet ist).

Allerdings sehe ich keine solchen Beweise, dass C's Tisch geholt.

Wie kann ich die prefetch-alle Cs und alle Bs und alle Cs, die "erreichbar", die aus einer bestimmten A? Ich sehe keinen Weg, dies zu tun.

  • Was JPA-provider verwenden Sie? Es gibt Hinweise in EclipseLink genau für diese Art von Funktionalität. Check-out eclipselink.join-fetch und eclipselink.batch Hinweise...
  • Danke. Wenn ich eclipselink.join-fetch, wie es aussieht bin ich erlaubt, nur ein einziges Attribut gesetzt. Ist das richtig? Zum Beispiel, wenn ich Schlag meine join-fetch Hauptstadt auf a.bs.c, wenn dann wollte ich auch join-fetch—sagen—a.bs.d würde ich wieder Glück. Richtig?
  • Oh, das ist interessant. Die EclipseLink Dokumentation (wiki.eclipse.org/EclipseLink/UserGuide/JPA/...) nicht sagen, dass die doppelte Abfrage-Tipp-Tasten möglich sind, aber vielleicht sind Sie? Siehe diesen interessanten link: github.com/mysema/querydsl/issues/348
  • Ich kann überprüfen, dass mehrere eclipselink.join-fetch Hinweise für die Arbeit. Wir verwenden es schwer bei der Arbeit und die generierten SQL-Anweisungen korrekt sind.
  • Danke. Haben Sie Erfahrungen mit diesem Fehler: bugs.eclipse.org/bugs/show_bug.cgi?id=408719?
InformationsquelleAutor Laird Nelson | 2013-05-21
Schreibe einen Kommentar