No main tive que passar como parâmetro o tipo de movimentação
package financas.br.com.caelum.financas.teste;
import br.com.caelum.financas.dao.MovimentacaoDao;
import br.com.caelum.financas.util.JPAUtil;
import financas.br.com.caelum.financas.modelo.Conta;
import financas.br.com.caelum.financas.modelo.TipoMovimentacao;
import javax.persistence.EntityManager;
import org.omg.IOP.ENCODING_CDR_ENCAPS;
/**
*
* @author thiago
*/
public class TesteConsultaComDAO {
public static void main(String[] args) {
EntityManager manager = new JPAUtil().getEntityManager();
Conta conta = new Conta();
conta.setId(2);
MovimentacaoDao dao = new MovimentacaoDao(manager);
Double media = dao.mediaDaConta(conta, TipoMovimentacao.SAIDA);
System.out.println(media);
}
}
Na DAO tive que colocar a query recebendo o tipo de movimentação
package br.com.caelum.financas.dao;
import financas.br.com.caelum.financas.modelo.Conta;
import financas.br.com.caelum.financas.modelo.TipoMovimentacao;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
/**
*
* @author thiago
*/
public class MovimentacaoDao {
private EntityManager manager;
public MovimentacaoDao(EntityManager manager) {
this.manager = manager;
}
public Double mediaDaConta(Conta conta, TipoMovimentacao tipo) {
TypedQuery<Double> query = manager.createQuery(
"select avg(m.valor) from Movimentacao m where m.conta=:pConta "
+ " and m.tipoMovimentacao = :pTipo", Double.class);
query.setParameter("pConta", conta);
query.setParameter("pTipo", tipo);
return query.getSingleResult();
}
}
Antes de eu adicionar esse parâmetro dava erro: Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
Isso que fiz era realmente necessário ou fiz algo errado?