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!
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.
Comentários muito úteis
Tem o mesmo, não corrigiu em 4.1.4