Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro no final do vídeo TypedQuery

Leonardo, acho que você se equivocou no final do vídeo TypedQuery. Quando foi feito o 'group by m.data', a consulta retornou 4 linhas, porque o agrupamento por data considera também as horas, minutos e segundos. Nesse caso, não houve agrupamento nenhum e, por isso, as 4 linhas foram retornadas (uma para cada data/hora diferente). E a média de um elemento é o próprio elemento. Não foi correto utilizar o distinct. O group by deveria ter sido feito utilizando funções que extraíssem apenas o dia, mês e ano da data. O resultado final apenas deu certo por coincidência (porque os dois elementos de cada dia eram iguais). Pode dar uma revisada aí? Espero ter sido claro. No mais, estou adorando o curso. Conteúdo fantástico e muito bem explicado.

3 respostas

apenas uma observação se vc quiser truncar a data basta passar passar a informação adicional no parâmetro:

query.setParameter("data", data,TemporalType.DATE);

ele vai considerar apenas a data, bom na realidade acho que ele coloca tudo no padrão dd/MM/yyyy 00:00:00, mas se obtem o resultado desejado. para agrupar por mês ou ano por exemplo:

select sum(m.valor),year(m.data)  from Movimento m group by year(m.data)

Percebi essa questão, Marcos.

Seguindo as dicas de vocês, escrevi a query utilizando as funções de data do JPQL da forma abaixo e deu certo:

"select avg(m.valor) from Movimentacao m where m.conta = :pConta "
                + " group by year(m.data), month(m.data), day(m.data)"

Obrigado, galera!

solução!

Pessoal, corrigi essa query no curso:

https://cursos.alura.com.br/course/persistencia-de-objetos-com-jpa-hibernate/task/42545

Obrigado por relatar.

abs, Nico