Querydsl: JPA fetchCount () e grupo por não funcionar

Criado em 19 out. 2015  ·  8Comentários  ·  Fonte: querydsl/querydsl

Este é um bug resultante desta postagem nos Grupos do Google (consulte https://groups.google.com/forum/#!topic/querydsl/WH582YIY98I):

Encontrei um problema estranho com um agrupamento por consulta bastante complexo quando se trata de contar o número de linhas que serão retornadas para a consulta - a consulta HQL criada contém uma cláusula de ter (o que está correto), mas omite a cláusula de agrupamento por ( o que não está correto e leva a uma exceção, afirmando que ter sido encontrado sem agrupar por). Depurei o problema e encontrei este código em JPQLSerializer.serialize():

    // group by
    if (!groupBy.isEmpty() && !forCountRow) {
        append(GROUP_BY).handle(COMMA, groupBy);
    }

    // having
    if (having != null) {
        append(HAVING).handle(having);
    }

Meu desejo seria que uma consulta de contagem com group by + have funcionasse, porque tenho um caso de uso em que preciso exatamente disso. Se isso não funcionar, pelo menos a parte de ter deve ser omitida quando fetchCount() for chamado.

Obrigado antecipadamente (por corrigir este bug) e obrigado pelo QueryDSL em geral, que é realmente incrível!

jpa progress

Comentários muito úteis

Tem o mesmo, não corrigiu em 4.1.4

Todos 8 comentários

Alguma atualização para esse problema?

Tem o mesmo, não corrigiu em 4.1.4

Também posso confirmar que isso está presente pelo menos até 3.7.4

.groupBy().count() está tentando colocar null em uma primitiva long .

A solução alternativa é usar .groupBy(element).singleResult(element.count()) que retorna o objeto Long e se aglutina no código até que o bug seja corrigido.

Também estou enfrentando esse problema, usando a versão 4.2.1. Minha consulta tem várias expressões na cláusula groupBy() e singleResult() não está mais disponível no QueryDSL 4. Alguma idéia de como aplicar a solução alternativa acima ao fazer .groupBy(element1, element2, ...) ?

Também ainda correndo para isso, infelizmente. Alguém encontrou uma solução alternativa?
(Outro então ter que usar JPA nativo)

Ainda levantou o mesmo erro em 4.2.1
@svenpanko aponta exatamente, então eu removi todas as expressões.
Mesmo precisando, mude o sql nativo temporariamente.

Algum progresso nisso? Faz 5 anos...

Sim, vamos descontinuar/removê-lo inteiramente para JPA: https://github.com/querydsl/querydsl/pull/2605 . A computação retornará a uma implementação na memória, pois simplesmente não pode ser feita com JPA simples.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mjungsbluth picture mjungsbluth  ·  6Comentários

timowest picture timowest  ·  7Comentários

d-schmidt picture d-schmidt  ·  5Comentários

devcken picture devcken  ·  6Comentários

viktorgt picture viktorgt  ·  3Comentários