hibernate - HQL 中带有嵌套 select 的 Case 语句

标签 hibernate hql

我在为此 SQL (Oracle) 创建 HQL 语句时遇到问题。

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

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) 

99% 的 Table1 和 Table2 映射都在上下文中。

如有任何建议,我们将不胜感激。

最佳答案

Table1 只有一条记录吗?如果没有,那么在案例中选择将不起作用,请尝试在 table1 和 table2 之间连接,如下所示:

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

如果table2、tabl3需要连接,那么不要忘记这样做,否则这里会发生笛卡尔连接。

关于hibernate - HQL 中带有嵌套 select 的 Case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623399/

相关文章:

java - 从表中获取最新的列,并按 HQL 中的另一列进行分组

hibernate - HibernateSystemException:无法从Grails中的类[java.lang.Long]解析实体名称

java - 由 : java. lang.IllegalArgumentException : org. hibernate.QueryException 引起:无法解析属性:customerNumber of:

java - 错误 : Communications link failure in MYSQL using JPA and Hibernate

java - 获取 "Deadlock found when trying to get lock; try restarting transaction"

java - 2个表之间的Quarkus/Hibernate关系

java - 使用 Hibernate 插入(更新)大量实体的最佳方法是什么?

sql - HQL中的子串提取

java - HQL 查询连接表

grails - 使用条件,如何在Grails GORM中基于max(column)获取结果列表