À l'aide de la Gauche Jointures dans les requêtes HQL sur 3 Tables
J'ai trois tableaux A, B et C. Maintenant, je veux exécuter la requête sql dans les requêtes HQL:
select * from A as a
left join
B as b
on
a.id = b.id
left join
C as c
on
b.type=c.type;
Besoin d'aide dans l'écriture de l'équivalent HQL. J'ai essayé avec ce HQL...
Query q = session.createQuery(
"FROM A as a
LEFT JOIN
B as b
on
a.id=b.id
LEFT JOIN
C as c
on
b.type=c.type");
Cette requête est en train de lancer une exception .....
org.mise en veille prolongée.hql.ast.QuerySyntaxError: unexpected token: GAUCHE, près de
ligne 1, colonne 23 [DE com.admin.Un comme un LEFT JOIN B b, où
un.Id=b.Id LEFT JOIN C que c où b.type=c.type] à
org.mise en veille prolongée.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:74)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:214)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.compiler(QueryTranslatorImpl.java:83)
au
org.mise en veille prolongée.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:414)
J'ai aussi essayé avec "avec" et "sur" les clauses, au lieu d'où...je reçois le même jeton inattendu sur "on" ou "avec"
exception disponible si SUR .....
org.mise en veille prolongée.hql.ast.QuerySyntaxError: unexpected token: SUR près de la ligne
1, colonne 41 [DE com.admin.Un comme un LEFT JOIN B comme b sur une.Id=b.Id de GAUCHE
REJOINDRE C que c onb.type=c.type] à
org.mise en veille prolongée.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:74)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:214)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.compiler(QueryTranslatorImpl.java:83)
au
org.mise en veille prolongée.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:414)
J'ai aussi essayé avec "avec" clauses, au lieu d'où...je reçois le même jeton inattendu ou "avec"
exception disponible si .....
org.mise en veille prolongée.hql.ast.QuerySyntaxError: unexpected token: SUR près de la ligne
1, colonne 41 [DE com.admin.Un comme un LEFT JOIN B comme b sur une.Id=b.Id de GAUCHE
REJOINDRE C que c onb.type=c.type] à
org.mise en veille prolongée.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:74)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:214)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127)
au
org.mise en veille prolongée.hql.ast.QueryTranslatorImpl.compiler(QueryTranslatorImpl.java:83)
au
org.mise en veille prolongée.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:414)
S'il vous plaît aider.
OriginalL'auteur Asuthosh Sharma | 2012-09-18
Vous devez vous connecter pour publier un commentaire.
Je suppose que vous avez déjà défini les associations dans votre configuration. Si donc, dans les requêtes HQL il devrait ressembler à ceci:
Il n'y a pas de "ON" déclaration dans les requêtes HQL, hibernate n'automatiquement sur la base de vos mappages et défini les Associations.
Attention à un.B et b.C.
Vous référer aux B et C en fonction de déjà les alias définis a & c.
comment ferions-nous pour stocker les données dans une liste, dans ce cas?
Cela devrait être accepté réponse 🙂
OriginalL'auteur Sergii Shevchyk
Utiliser cette requête
OriginalL'auteur xrcwrn