2009-12-01 2 views
0

J'ai un modèle de données simple dans JPA (veille prolongée) composé de plusieurs à un et à une relation semblable à ceci:Quelle est la syntaxe correcte pour une requête EJBQL qui traverse quatre niveaux de plusieurs relations individuelles

ville -> état -> gouverneur -> nation -> continent

où la ville est à plusieurs à déclarer, l'État est un à un au gouverneur, le gouverneur est un à un à la nation et la nation est à un à un continent.

Je voudrais chercher une seule instance de la ville par son Id unique et aussi avec impatience chercher son état lié, gouverneur, nation et continent à l'aide EJBQL. Je crois que le bon EJBQL est:

select t from town t 
join fetch t.state s 
join fetch s.governor g 
join fetch g.nation n 
join fetch n.continent c 
where t.id=?id 

Hiberante génère le code SQL correct de ce EJBQL, mais quand je fais myTown.getState() getGovernor().. Je récupère un objet nul pour mon gouverneur. Pourquoi hibernate ne remplit pas le gouverneur? Il semble qu'il ne veut pas peupler les objets de plus d'un niveau dans l'arbre. Quelqu'un voit-il ce que je fais mal?

Répondre

0

Nevermind. Ma syntaxe ci-dessus fonctionne en effet. Mon problème n'était pas de vider la session d'hibernation d'une activité précédente et d'obtenir une version en cache de l'objet qui n'était pas proprement rempli. Après avoir corrigé ce problème, tout va bien.

Questions connexes