Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate HQL中带有嵌套select的Case语句_Hibernate_Hql - Fatal编程技术网

Hibernate HQL中带有嵌套select的Case语句

Hibernate HQL中带有嵌套select的Case语句,hibernate,hql,Hibernate,Hql,我无法为此SQL(Oracle)创建HQL语句 HQL看起来更像是相同的。问题在于案例中的嵌套选择 错误: java.lang.NullPointerException at org.hibernate.hql.ast.tree.CaseNode.getDataType(CaseNode.java:40) at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.j

我无法为此SQL(Oracle)创建HQL语句

HQL看起来更像是相同的。问题在于案例中的嵌套选择

错误:

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) 
java.lang.NullPointerException
位于org.hibernate.hql.ast.tree.CaseNode.getDataType(CaseNode.java:40)
在org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:165)上
位于org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:831)
位于org.hibernate.hql.ast.hqlslwalker.processQuery(hqlslwalker.java:619)
在org.hibernate.hql.antlr.HqlSqlBaseWalker.query(hqlsqlberwalker.java:672)
位于org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288)
位于org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
位于org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
位于org.hibernate.hql.ast.QueryTranslatorImpl.docomfile(QueryTranslatorImpl.java:185)
位于org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
在org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)
在org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)
位于org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
位于org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
位于org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
位于org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
对于99%,表1和表2映射位于上下文中


任何建议都将不胜感激。

表1是否只有一条记录?如果否,则在案例中从中选择将不起作用,请尝试在表1和表2之间联接,如下所示:

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

如果需要连接表2、表3,那么不要忘记这样做,如果不这样做,这里将发生笛卡尔连接。

我们可以看到HQL吗?您能否将表2作为查询的一部分连接到表1,并在hql中说:从表2中选择(当'VALUE1'时为case column1,然后是table1.col2 else column3 end)将Table2.table1连接为table1或类似内容?
    SELECT 
     CASE WHEN Column1 = 'VALUE1' THEN (
     COL2
     ) ELSE 
     Column3
    END AS CASE1
     FROM TABLE2 , Table1 
    WHERE Columnx = 'something that is unique'