2011-07-08 10 views
4

このSQL(Oracle)用のHQL文を作成する際に問題があります。HQLでネストされた選択を含むcase文

SELECT 
CASE WHEN Column1 = 'VALUE1' THEN (
    SELECT COL2 FROM Table1 
) ELSE 
Column3 
END 
FROM TABLE2 WHERE Columnx = 'something that is unique' 

HQLの外観は同じです。問題は、そのケースでの入れ子の選択です。

誤差99%の

java.lang.NullPointerException 
    at org.hibernate.hql.ast.tree.CaseNode.getDataType(CaseNode.java:40) 
    at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:165) 
    at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:831) 
    at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:619) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:672) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254) 
    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及び表2のマッピングは、コンテキストにあります。

アドバイスをいただければ幸いです。

+0

HQLを見ることはできますか?表2を表1に結合して、表2からhql:select(case1の 'VALUE1'、次にtable1.col2 else column3 end)という表2をtable1などのように結合したままにすることはできますか? – ndtreviv

答えて

0

表1には1つのレコードしかありませんか?何その後、ケースの内側に、そこから選択が動作しませんしません場合は、このように、TABLE1とtable2の間で参加しよう:

SELECT 
    CASE WHEN Column1 = 'VALUE1' THEN (
    COL2 
    ) ELSE 
    Column3 
    END AS CASE1 
    FROM TABLE2 , Table1 
    WHERE Columnx = 'something that is unique' 

表2、tabl3が参加する必要がある場合は、その場合には、そうすることを忘れないでくださいデカルト結合はここで起こるのではない。

関連する問題