聚合函数中的 criteriaBuilder selectCase 抛出 QuerySyntaxException
criteriaBuilder selectCase in aggregate function throw QuerySyntaxException
我想在聚合函数中做一个 select 案例,但它抛出一个 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);
有什么建议吗?
非常感谢
已解决。我刚刚更新了 Hibernate 版本,现在可以使用了。我猜以前的版本不支持聚合函数中的条件...
我想在聚合函数中做一个 select 案例,但它抛出一个 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);
有什么建议吗?
非常感谢
已解决。我刚刚更新了 Hibernate 版本,现在可以使用了。我猜以前的版本不支持聚合函数中的条件...