3つのテーブルA BとCがあります。次に、このSQLクエリを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;
同等のHQLの作成に助けが必要です。この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");
このクエリは例外をスローしています.....
org.hibernate.hql.ast.QuerySyntaxError:予期しないトークン:行1、列23の近くにLEFT [F.com.admin.AはLEFT JOIN B as b、a.Id = b.Id LEFT JOIN C as c where b。 type = c.type] 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)(org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.Java:83)(org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.Java:414))
また、 "with"句と "on"句を使用して、代わりに "on"または "with"で同じ予期しないトークンを取得しました。
例外qith ON .....
org.hibernate.hql.ast.QuerySyntaxError:予期しないトークン:行1、列41付近でON [com.admin.Aから左結合Bとしてb。a.Id = b.Id左結合Cとしてc onb.type = c.type] 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)(org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.Java:83)at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.Java:414)
私はまた、代わりに「with」句を試してみました...同じ予期しないトークンが「または」で取得されます
例外qith WITH .....
org.hibernate.hql.ast.QuerySyntaxError:予期しないトークン:行1、列41付近でON [com.admin.Aから左結合Bとしてb。a.Id = b.Id左結合Cとしてc onb.type = c.type] 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)(org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.Java:83)at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.Java:414)
助けてください。
構成で必要なすべての関連付けをすでに定義していると思います。その場合、HQLでは次のようになります。
from A as a left join a.B as b left join b.C as c
HQLには「ON」ステートメントはありません。Hibernateは、マッピングと定義された関連付けに基づいて自動的に行います。
a.Bおよびb.Cに注意してください。
すでに定義されているエイリアスa&cに基づいてBおよびCを参照します。
このクエリを使用
from A as a
left join fetch a.B as b
left join fetch b.C as c