【发布时间】:2018-08-16 17:26:03
【问题描述】:
我有以下在 oracle 中可以正常工作的请求:
SELECT SUM(col1_sum + col2_sum + col3_sum) AS sum_total FROM (
SELECT
COUNT(CASE WHEN (col1 != 0) THEN 1 END) AS col1_sum,
COUNT(CASE WHEN (col2 IS NULL) THEN 1 END) AS col2_sum,
COUNT(CASE WHEN (col3 IS NULL OR col 3 < 0) THEN 1 END) AS col3_sum
FROM myTable)
;
它根据我的所有条件返回正确的总和
但是当我把它翻译成这样的 HQL 时:
@Query("SELECT SUM(col1_sum + col2_sum + col3_sum) AS sum_total FROM ( "
+"SELECT "
+" COUNT(CASE WHEN (col1 != 0) THEN 1 END) AS col1_sum, "
+" COUNT(CASE WHEN (col2 IS NULL) THEN 1 END) AS col2_sum, "
+" COUNT(CASE WHEN (col3 IS NULL OR col 3 < 0) THEN 1 END) AS col3_sum "
+"FROM myTable)")
我可以毫无错误地编译我的项目,但是当我启动它时,我从休眠中收到以下错误:
2018-03-08 11:18:54.485 [NO_USER NO_SESSION] ERROR o.h.h.i.a.ErrorCounter : line 1:96: unexpected token: (
antlr.NoViableAltException: unexpected token: (
at org.hibernate.hql.internal.antlr.HqlBaseParser.fromRange(HqlBaseParser.java:1544)
[....]
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 96 [...]
显然休眠不会在第一行的FROM ( 之后重新调整我的查询
有什么方法可以正确地将我的 Oracle/SQL 请求转换为 Hibernate/HQL 吗?
【问题讨论】: