2012-09-18 13 views
9

tengo tres cuadros A B y C. Ahora quiero ejecutar esta consulta SQL en HQL:izquierda se une en HQL en 3 Tablas

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; 

necesitan ayuda para escribir HQL equivalente. Probé con este 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"); 

Esta consulta está lanzando una excepción .....

org.hibernate.hql.ast.QuerySyntaxError: unexpected token: LEFT near line 1, column 23 [FROM com.admin.A as a LEFT JOIN B as b where a.Id=b.Id LEFT JOIN C as c where b.type=c.type] at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:74) at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:214) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83) at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:414)

También probé con "con" y "en" cláusulas lugar de donde ... me da la misma manera inesperada en "on" o "con"

excepción qith eN .....

org.hibernate.hql.ast.QuerySyntaxError: unexpected token: ON near line 1, column 41 [FROM com.admin.A as a LEFT JOIN B as b on a.Id=b.Id LEFT JOIN C as c onb.type=c.type] at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:74) at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:214) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83) at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:414)

también probé con "con" cláusula s en lugar de dónde ... Me da la misma manera inesperada o "con"

excepción qith CON .....

org.hibernate.hql.ast.QuerySyntaxError: unexpected token: ON near line 1, column 41 [FROM com.admin.A as a LEFT JOIN B as b on a.Id=b.Id LEFT JOIN C as c onb.type=c.type] at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:74) at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:214) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:127) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83) at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:414)

favor, ayuda.

Respuesta

15

Supongo que ya ha definido todas las asociaciones necesarias en su configuración. Si es así, en HQL se vería así:

from A as a left join a.B as b left join b.C as c 

No hay "ON" declaración en HQL, Hibernate automáticamente en función de sus asignaciones y asociaciones definidas.

Preste atención a a.B y b.C.

Usted se refiere a B y C en base a los alias ya definidos a & c.

+0

usted osciló upvoted que – kakabali

+0

¿cómo podemos almacenar los datos en una lista en este caso? – kakabali

+0

Esta debería ser la respuesta aceptada :) – tusar

7

utilizar esta consulta

from A as a 
left join fetch a.B as b 
left join fetch b.C as c 
+0

meciste upvoted you – kakabali

Cuestiones relacionadas