HQL: Extraction de Rejoindre les Collections d'Désireux de Table
J'ai quatre tables:
RootNode // Will return multiple root nodes
SubNode // Will return one sub node per root node
SubNodeChildren1 // Will return multiple for each sub node
SubNodeChildren2 // Will return multiple for each sub node
et une entité semblable structure:
RootNode -> SubNode -> SubNodeChildren1
-> SubNodeChildren2
J'ai besoin d'une requête qui renvoie tous les RootNodes
dans le tableau avec ses SubNode
et SubNode
enfants initialisé. Le SubNode
est avec impatience par les cheveux, mais le SubNode
enfants est paresseux par les cheveux.
Je sais comment écrire une requête qui va LEFT OUTER JOIN FETCH
les enfants immédiats d'un tableau et de les initialiser en conséquence. Cependant, je n'ai aucune idée de la façon de prendre les enfants d'une table qui est très récupérée à partir de haut-niveau de la table.
J'ai essayé quelque chose comme:
SELECT rn FROM RootNode AS rn LEFT OUTER JOIN FETCH rn.SubNode.SubNodeChildren1
mais, cela me donne toujours une erreur que le propriétaire n'est pas partie de la sélection.
Toute aide est grandement appréciée.
Vous devez vous connecter pour publier un commentaire.
Ici va Hibernate référence
Qui implique votre requête doit être ré-écrite comme
Vous pouvez soit
désactiver par défaut sous-nœud fetch=FetchType.IMPATIENT et juste récupérer ce que vous voulez vraiment en utilisant la requête HQL - Il (requête HQL) effectivement remplace la jointure externe et paresseux déclarations du fichier de mappage pour les associations et les collections (Hibernate documentation de référence). Cette approche est appuyée par des POJO dans l'Action du livre.
ou de permettre la collecte de SubNodeChildren comme fetch=FetchType.DÉSIREUX
Le suivant a été extrait à partir de la veille prolongée FAQ (Le lien a été désactivé (autant Que je sache), mais j'ai sauvé avant de disparaître)
Dans une application MVC, comment pouvons-nous nous assurer que toutes les procurations et paresseux collections sera initialisé lors de l'affichage essaie d'y accéder ?
...
Afin d'obtenir la requête de travail, j'ai dû faire une
INNER JOIN FETCH
au lieu d'unLEFT OUTER JOIN FETCH
sur le désireux de l'entité:Pour être honnête, je ne suis toujours pas exactement pourquoi, c'est travailler avec un
INNER JOIN FETCH
vs unLEFT OUTER JOIN FETCH
, mais il est certainement un travail exactement comme j'en ai besoin.LEFT OUTER JOIN FETCH rn.SubNode AS sn
, était celui dont j'avais besoin pour mes entités pour fonctionner correctement. (Toute cette confusion était due à un problème avec mon environnement de test)