Java Hibernate使用case when else查询导致hql中的异常

标签 java mysql hibernate hql

此查询的用途:

需要获取keywordIds的最低排名,其中排名不等于0搜索引擎是“xyz.com”,如果keywordId没有除0以外的排名,那么它应该显示为10000

TrackId | 关键字ID | 搜索引擎 | 排名

1 | 101 | 101 xyz.com | 0

1 | 101 | 101 xyz.com | 55

1 | 101 | 101 xyz.com | 12

2 | 201 | 201 xyz.com | 1

2 | 201 | 201 xyz.com | 98

2 | 201 | 201 xyz.com | 23

3 | 301 | 301 xyz.com | 0

3 | 301 | 301 xyz.com | 0

<小时/>

结果应该是:

最低排名

<小时/>

12

1

10000

<小时/>

当我使用如下 hql 查询时,我得到的结果出现异常:

bestRanks[i] = (List<Integer>)getHibernateTemplate().findByNamedParam("Select min(case when Rank > 0 then Rank else 10000 end) from Serpstrackhistory t where t.keywordId in (:KeywordId) and t.searchEngine=(:SearchEngine) group by KeywordId ORDER BY FIELD(KeywordId,t.keywordId in (:KeywordIds))",new String[]{"KeywordId", "SearchEngine", "KeywordIds"}, new Object[]{keywordId ,searchEngine[i], keywordId});

异常(exception):

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.AggregateNode 
 \-[AGGREGATE] AggregateNode: 'min'
    \-[CASE] CaseNode: 'case'
       +-[WHEN] SqlNode: 'when'
       |  +-[GT] BinaryLogicOperatorNode: '>'
       |  |  +-[IDENT] IdentNode: 'Rank' {originalText=Rank}
       |  |  \-[NUM_INT] LiteralNode: '0'
       |  \-[IDENT] IdentNode: 'Rank' {originalText=Rank}
       \-[ELSE] SqlNode: 'else'
          \-[NUM_INT] LiteralNode: '10000'

当我使用如下原始查询时,我得到的结果是正确的:

SELECT min(case when Rank > 0 then Rank else 10000 end) FROM `serpstrackhistory` WHERE  KeywordId in (1,2,3) and SearchEngine="xyz.com" group by KeywordId

请帮助我了解我的 hql 查询中有什么不正确。

最佳答案

请尝试使用别名进行查询 -

min(case when t.Rank > 0 then t.Rank else 10000 end)

关于Java Hibernate使用case when else查询导致hql中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41339930/

相关文章:

java - 从 Jni 调用的 C++ 析构函数上的段错误

php - 使用 JOINING 表创建 mysql 查询语法

mysql - 我的查询没有使用我的索引,我如何使用解释计划并用 MySQL 修复这个缓慢的查询

java - 无法创建未找到的唯一键约束

java - 将 ArrayList 值分配给另一个

java - 设计决策 : Adding new arguments to a method V/S creating an instance variable

java - 如何在 JSF2.0 中使用导航规则?

mysql - ZEND + MAC + MYSQL = 错误!服务器没有更新 PID 文件就退出了

java - Hibernate 和存储库模式有多个类似的 CRUD 方法吗?

java - Hibernate 是否完全支持 SQLite