聚合函数中的 criteriaBuilder selectCase 抛出 QuerySyntaxException

Posted

技术标签:

【中文标题】聚合函数中的 criteriaBuilder selectCase 抛出 QuerySyntaxException【英文标题】:criteriaBuilder selectCase in aggregate function throw QuerySyntaxException 【发布时间】:2017-11-20 14:47:15 【问题描述】:

我想在聚合函数中做一个选择案例,但它抛出了 QuerySyntaxException

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: case near line 1, column 125 : [select new com.dev.entity.User(generatedAlias0.id, generatedAlias0.name, generatedAlias0.date, generatedAlias0.mode, count(case when generatedAlias0.id=:param2 then :param3 else :param4 end)) from com.renault.dev.User as generatedAlias0]

如果case 函数无法识别:/

有条件查询

Expression<String> idCountCase = builder.<String>selectCase().when(builder.equal(userRoot.get(User_.id), "id01"), "EXISTS").otherwise("NOT EXISTS");
Expression<Long> idCount = builder.count(idCountCase);
criteriaQuery.multiselect(userRoot.get(User_.id), userRoot.get(User_.name), userRoot.get(User_.date), userRoot.get(User_.mode), idCount);

有什么建议吗? 非常感谢

【问题讨论】:

【参考方案1】:

已解决。我刚刚更新了 Hibernate 版本,它现在可以工作了。我猜以前版本不支持聚合函数中的条件...

【讨论】:

以上是关于聚合函数中的 criteriaBuilder selectCase 抛出 QuerySyntaxException的主要内容,如果未能解决你的问题,请参考以下文章

带有 CONCAT_WS 函数的 JPA CriteriaBuilder 抛出 NullPointerException

JPA CriteriaBuilder 中的自定义表达式

在聚合函数中选择

MYSQL查询--聚合函数查询

where中不能使用聚合函数

如何使用 CriteriaBuilder 的多个 JOIN 来构建 Predicate?