这是在 Google 网上论坛上发布的一个错误(请参阅 https://groups.google.com/forum/#!topic/querydsl/WH582YIY98I):
在计算将为查询返回的行数时,我发现一个相当复杂的 group by 查询存在一个奇怪的问题 - 创建的 HQL 查询包含一个 having 子句(这是正确的),但省略了 group by 子句(这是不正确的,并导致异常,说明遇到没有 group by)。 我调试了问题并在 JPQLSerializer.serialize() 中找到了这段代码:
// group by
if (!groupBy.isEmpty() && !forCountRow) {
append(GROUP_BY).handle(COMMA, groupBy);
}
// having
if (having != null) {
append(HAVING).handle(having);
}
我希望使用 group by + 的 count 查询可以工作,因为我有一个我需要的用例。 如果这不起作用,那么在调用 fetchCount() 时至少应该省略 have 部分。
在此先感谢(修复此错误)并感谢 QueryDSL,这真是太棒了!
关于这个问题的任何更新?
有相同的,没有在 4.1.4 中修复它
我还可以确认这至少存在到 3.7.4
.groupBy().count()
试图将 null 推入long
原语。
解决方法是使用.groupBy(element).singleResult(element.count())
返回Long
对象并在代码中合并,直到修复错误。
我也遇到了这个问题,使用版本 4.2.1。 我的查询在groupBy()
子句中有多个表达式,并且singleResult()
在 QueryDSL 4 中不再可用。关于在执行.groupBy(element1, element2, ...)
时如何应用上述解决方法的任何想法?
不幸的是,也仍然遇到这种情况。 有没有人找到解决方法?
(其他则必须使用本机 JPA)
在 4.2.1 中仍然出现同样的错误
@svenpanko准确地指出,所以我删除了所有有表达式..
偶需要,临时改一下原生sql。
这方面有什么进展吗? 已经5年了...
是的,我们将为 JPA 完全弃用/删除它: https ://github.com/querydsl/querydsl/pull/2605。 计算将回退到内存中的实现,因为它根本无法使用普通的 JPA 完成。
最有用的评论
有相同的,没有在 4.1.4 中修复它