Comment dois-je faire un “profond” fetch rejoindre en JPQL?

Je ne pense pas que je vais jamais comprendre pleinement chercher des jointures.

J'ai une question où je suis tenter d'impatience "gonfler" les références en bas de deux niveaux.

Qui est, à mon A a une option Collection de Bs, et chaque B a 0 ou 1 C. La taille de la B collection est connu pour être de petite taille (10 à 20 tops). J'aimerais prefetch ce graphique.

A's B relation est marquée comme FetchType.LAZY et est facultative. B'relation de C est également facultative et FetchType.LAZY.

J'espérais que je pourrais faire:

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

Lorsque je l'exécute, je vois que As B collection est en effet récupéré (je vois un LEFT JOIN dans le SQL faisant référence à la table à laquelle B est mappé).

Cependant, je ne vois aucune preuve que C's de la table est extrait.

Comment puis-je prefetch tous Cs et tous les Bs et tous les Cs qui sont "accessible" à partir d'un A? Je ne vois aucune façon de le faire.

Ce fournisseur JPA utilisez-vous? Il y a des conseils dans EclipseLink exactement pour ce genre de fonctionnalité. Découvrez eclipselink.join-fetch et eclipselink.batch conseils...
Je vous remercie. Si j'utilise eclipselink.join-fetch, on dirait que je suis autorisé à mettre un seul attribut. Est-ce exact? Par exemple, si je souffle mon join-fetch capital sur a.bs.c, puis, si je voulais aussi join fetch—dire—a.bs.d je serais hors de la chance. Droit?
Oh, c'est intéressant. Le EclipseLink documentation (wiki.eclipse.org/EclipseLink/UserGuide/JPA/...) ne dit pas que la double indicateur de requête touches sont possibles, mais ils sont peut-être? Voir ce lien intéressant: github.com/mysema/querydsl/issues/348
Je peux confirmer que plusieurs eclipselink.join-fetch conseils de faire le travail. Nous l'utilisons beaucoup au travail et les instructions SQL générées sont corrects.
Merci. Avez-vous une expérience avec ce bug: bugs.eclipse.org/bugs/show_bug.cgi?id=408719?

OriginalL'auteur Laird Nelson | 2013-05-21