Querydsl: JPA fetchCount() 和 group by 不工作

创建于 2015-10-19  ·  8评论  ·  资料来源: querydsl/querydsl

这是在 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,这真是太棒了!

jpa progress

最有用的评论

有相同的,没有在 4.1.4 中修复它

所有8条评论

关于这个问题的任何更新?

有相同的,没有在 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 完成。

此页面是否有帮助?
0 / 5 - 0 等级