2012-03-15 11 views
3

文中のHQLサブクエリの実行に問題があります。任意の助けHibernate Sub case in case case

select case when a.entityId is null then 'invalid' else 
    (select b.entityName from tblName b where b.entityId =a.entityId) 
    end from tblEntity a 

ありがとう:

は、ここに私のコードです!

[OK]を...ここにこの機能は休止状態ではサポートされていない完全なスタックトレース

ERROR org.hibernate.hql.PARSER - <AST>:0:0: unexpected AST node: query 
Exception in thread "Thread-5" org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: query [select case when a.entityId is null then 'invalid' else 
     (select b.entityName from tblName b where b.entityId =a.entityId) 
     end from tblEntity a] 
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54) 
    at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47) 
    at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94) 
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651) 
+1

エラーは何ですか? – ManuPK

+0

org.hibernate.hql.ast.QuerySyntaxException:予期しないASTノード –

+0

まだ手がかりがありません!質問を編集し、**完全なスタックトレース**を追加してください! – ManuPK

答えて

2

です。 しかし、回避策が存在します。 データベースにビューを作成し、HQLを使用してjavaを使用して結果を取得します。

a.entityIdがnullである場合から、次に '無効' 他 (tblNameのB b.entityId = a.entityIdからb.entityNameを選択) 端力ビューVW_ENTITY_VALUE(EntityValueの) として選択した場合を作成するか、または置き換えますtblEntity a; http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-subqueries

14.13:HQLのドキュメントから

。サブクエリ

サブセレクションをサポートするデータベースの場合、Hibernateはクエリ内のサブクエリをサポートします。サブクエリはかっこで囲まなければなりません(SQL集約関数呼び出しによって)ことがあります。相関サブクエリ(外部クエリのエイリアスを参照するサブクエリ)も許可されます。 cat.nameが名前として名前からいくつかの( 選択name.nickNameを=猫 としてDomesticCatのから(DomesticCatの猫 から 選択AVG(cat.weight))fatcat fatcat.weight>として猫から

cat.nameない( 名 として名からname.nickNameを選択) 猫 としてDomesticCatのから(猫からメイトとしてどこmate.mate =猫 ) 存在しない猫 として猫から ) cat.idを選択する(sel Cat.kittenキットからのect max(kit.weight) Cat from cat HQLサブクエリはselectまたはwhere句でのみ使用できます。