Join Fetch: "la requête spécifiée chargement par jointure ouverte, mais le propriétaire de l'association a été récupérée
J'ai le Modèle suivant Activity
avec la langue en fonction de la propriété Title
. La langue-la dépendance est définie avec deux autres entités Translation
(le Titre est de ce type, plusieurs-à-un) et TranslationValue
(un-à-plusieurs).
Si je vous écris à la suite de requêtes hql:
from Activity act join fetch act.Title join fetch act.Title.TranslationValuesSet
Cela fonctionne bien jusqu'à présent. Mais dès que j'ai ajouter de la loi dans les sélectionnez-déclaration, j'ai un problème avec la jointure de TranslationValuesSet:
select act from Activity act join fetch act.Title join fetch act.Title.TranslationValuesSet
NHibernate.QueryException: Query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=,role=Translation.TranslationValuesSet,tableName=TranslationValue,tableAlias=translatio3_,origin=Translation translatio2_,colums={translatio2_.TranslationId ,className=TranslationValue}}] [select act from Activity act join fetch act.Title join fetch act.Title.TranslationValuesSet
Je ne peux pas comprendre pourquoi Hibernate n'est pas comme ça!?
Merci pour tout les conseils!
OriginalL'auteur sl3dg3 | 2011-03-23
Vous devez vous connecter pour publier un commentaire.
... s'avère que j'ai besoin de définir un alias pour la première jointure. Cela fait l'affaire (avis alias
title
):Toutefois, cela ne fonctionnera pas si vous essayez de sélectionner une combinaison de champs et imbriquées entités 🙁
J'ai connu le même problème lors de la mise à niveau à partir d'Hibernate 3.3 mise en veille prolongée 3.6 et pas le cas dans l'officiel du guide de migration(s) ont-ils même mentionné que l'analyseur de Requête de comportement ont peut-être changé !! Hibernate a besoin de faire un meilleur travail avec leurs guides de migration !
Vous n'êtes pas censé pour spécifier un alias pour une extraction de la rejoindre, parce que vous n'êtes pas censé l'utiliser dans la liste de sélection.
OriginalL'auteur sl3dg3