Boa tarde galera.
Estou tentando fazer algo um pouco diferente do que vi no curso até o momento. Estou tentando preencher um objeto a partir de uma consulta jpql.
Porém estou tendo alguns problemas para popular o objeto. É retornada uma mensagem, alertando sobre o construtor do meu objeto, informando que ele não seria apropriado para popular o objeto.
Segue o código java desenvolvido.
package br.com.caelum.financas.teste;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.caelum.financas.modelo.Conta;
import br.com.caelum.financas.modelo.MovimentacaoMediaPorData;
import br.com.caelum.financas.modelo.TipoMovimentacao;
import br.com.caelum.financas.util.JPAUtil;
public class TesteFuncoesJPQL {
public static void main(String[] args) {
Conta conta = new Conta();
conta.setId(3);
String jpql = "Select new br.com.caelum.financas.modelo.MovimentacaoMediaPorData(AVG(m.valor), day(m.data), month(data), year(data)) from Movimentacao m where m.conta = :pConta "+
"and m.tipo = :pTipo "+
"group by day(data), month(data), year(data)";
EntityManager em = new JPAUtil().getEntityManager();
Query query = em.createQuery(jpql);
query.setParameter("pConta", conta);
query.setParameter("pTipo", TipoMovimentacao.SAIDA);
List<MovimentacaoMediaPorData> movimentacoesMediaPorData = (List<MovimentacaoMediaPorData>) query.getResultList();
for (MovimentacaoMediaPorData movimentacaoMediaPorData : movimentacoesMediaPorData) {
System.out.println("A média do valor das movimentações para o dia "+movimentacaoMediaPorData.getDia()+"/"+movimentacaoMediaPorData.getMes()+"/"+movimentacaoMediaPorData.getAno()+" é:"+movimentacaoMediaPorData.getMedia());
}
em.getTransaction().begin();
em.getTransaction().commit();
em.close();
}
}
Penso que o problema possa ser no retorno das funções day(), month() e year(). Como elas funcionam, retornam qual tipo de dado, eu imaginei que pudesse funcionar colocando os atributos do meu objeto com Long.