1
resposta

Erro no editor, mas código funciona

Ao declarar o @NamedQuery da média das movimentações na classe Movimentacao, o Eclipse deixou um sinalizador de erro (X) em vermelho, com o texto abaixo:

Multiple markers at this line

- No constructors can be found that match the argument types.
- The GROUP BY clause has 'year' and '(m.data)' that are not separated by a comma.
- The GROUP BY clause has 'month' and '(m.data)' that are not separated by a comma.
- The GROUP BY clause has 'day' and '(m.data)' that are not separated by a comma.
- The identification variable 'month' is not defined in the FROM clause.
- The identification variable 'day' is not defined in the FROM clause.
- The identification variable 'month' is not defined in the FROM clause.
- The identification variable 'day' is not defined in the FROM clause.
- The constructor expression has two constructor items ('month' and '(m.data)') that are not separated by a 
 comma.
- The constructor expression has two constructor items ('day' and '(m.data)') that are not separated by a 
 comma.
- The identification variable 'year' is not defined in the FROM clause.

Entretanto, a função para retornar a média funciona utilizando a @NamedQuery. Segue a linha de como eu fiz a declaração:

@NamedQuery(name = "mediaDiariaMovimentacoes", query = "select new br.com.alura.jpa.modelo.MediaComData(avg(m.valor), day(m.data), month(m.data)) from Movimentacao m group by day(m.data), month(m.data), year(m.data) ")

O que pode estar errado? Seria algo do meu Eclipse apenas, já que o Java compilou e rodou normalmente?

1 resposta

Olá Edgar, tudo bem?

O Eclipse tem um validador de JPQL embutido que tenta verificar a sintaxe e a semântica das suas consultas JPQL. No entanto, esse validador nem sempre é perfeito e pode gerar erros falsos positivos, especialmente para consultas mais complexas ou quando você está usando recursos específicos do JPA que o validador do Eclipse não entende completamente.

No seu caso, parece que o validador do Eclipse está confuso com a função day(), month() e year() na cláusula group by e com o uso do construtor new na cláusula select.

Se o erro é apenas no editor e não está causando problemas na execução do seu código, você pode desativar a validação de JPQL no Eclipse. Para fazer isso, vá em Window -> Preferences -> JPA -> JPQL -> Editor e desmarque a opção "Enable JPQL validation".

Espero que isso ajude! Se você tiver mais perguntas, fique à vontade para perguntar.