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

o meu código esta dando esse erro como posso resolver? Exception in thread "main" java.lang.IllegalArgumentException: Parameter value [br.com.byteBanke.modelo.Banco@24097e9b] did not match expected type [java.lang.Integer

insira seu código aquipackage br.com.byteBankeTeste;


import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.byteBanke.modelo.Banco;
import br.com.byteBanke.modelo.Movimentacao;
import br.com.byteBankeEnum.EnumMetodo;
import br.com.byteBankeUtil.Isolando_Codigo;

public class TesteJQL {

    public static void main(String[] args) {
        Banco conta = new Banco();
        conta.setId(2);
        //Movimentacao tipoMovimentacao = new Movimentacao();


        EntityManager em = new Isolando_Codigo().pegaEntityManager();

        em.getTransaction().begin();

        // String jpql = "select m from Movimentacao m where m.conta.id = 10";
        String jpql = "select m from Movimentacao m where m.conta.id = :pConta" + " and m.tipo = :pTipo" + " order by m.valor desc";
         Query query =  em.createQuery(jpql);
         query.setParameter("pConta", conta);
         query.setParameter("pTipo",EnumMetodo.SAIDA );
         List<Movimentacao> resultados = query.getResultList();

         for(Movimentacao movimentacao : resultados) {
             System.out.println("Descricao"+ movimentacao.getDescricao());
             System.out.println("contaId"+ movimentacao.getId());
         }
        em.getTransaction().commit();
        em.close();

    }

}
2 respostas
solução!

A sua consulta contém o seguinte trecho:

 m.conta.id = :pConta

Nesse ponto ela compara o campo id da entidade conta com o parâmetro fornecido em :pConta que nesse caso está sendo a própria entidade.

query.setParameter("pConta", conta);

O erro demonstra esse ponto. O tipo esperado é um Integer (que é o tipo do atributo id da classe Banco), mas foi encontrado a referência da entidade.

Se a necessidade for consultar a movimentação da conta de id = 2 você poderia utilizar:

query.setParameter("pConta", conta.getId());

ou

query.setParameter("pConta", 2);

Fala Aldeir, beleza?

A exeception é por causa do conflito de tipos de parametro,

Parameter value[br.com.byteBanke.modelo.Banco@24097e9b] did not match expected type [java.lang.Integer

Eu não consigo identificar só olhando no seu Main() qual é o parâmetro exato, mais dá para perceber que é um atributo da classe Banco que está com conflito.

TMJ, bons estudos.