2
respostas

Erro no Main ao tentar executar o a classe TesteConta

erro: Exception in thread "main" java.lang.IllegalArgumentException: attempt to create delete event with null entity at org.hibernate.event.spi.DeleteEvent.(DeleteEvent.java:45) at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:924) at org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:895) at br.com.caelum.financas.teste.TesteConta.main(TesteConta.java:31) C:\Users\Luciano\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 1 segundo)


Classe:

package br.com.caelum.financas.teste;

import br.com.caelum.financas.modelo.Conta;
import br.com.caelum.financas.util.JPAUtil;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 * Created by leonardocordeiro on 24/02/17.
 */
public class TesteConta {

    public static void main(String[] args) {

        Conta conta = new Conta();
        conta.setId(1);
        conta.setTitular("Danilo");
        conta.setBanco("Banco do Brasil");
        conta.setAgencia("123");
        conta.setNumero("456");

        EntityManager em = new JPAUtil().getEntityManager();
        em.getTransaction().begin();

//        em.persist(conta);
//        conta.setBanco("Bradesco");

        conta = em.find(Conta.class, conta.getId());
        em.remove(conta);

        em.getTransaction().commit();
        em.close();

        EntityManager em2 = new JPAUtil().getEntityManager();
        em2.getTransaction().begin();

        conta.setTitular("Leonardo");
        em2.merge(conta);

        em2.getTransaction().commit();
        em2.close();
    }
}

Classe de teste jpql que testei e apontou erro na classe acima:

package br.com.caelum.financas.teste;

import br.com.caelum.financas.modelo.Conta;
import br.com.caelum.financas.modelo.Movimentacao;
import br.com.caelum.financas.modelo.TipoMovimentacao;
import br.com.caelum.financas.util.JPAUtil;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;

/**
 * Created by leonardocordeiro on 24/02/17.
 */
public class TesteJPQL {

    public static void main(String[] args) {
        EntityManager manager = new JPAUtil().getEntityManager();

        Conta conta = new Conta();
        conta.setId(1);

        Query query = manager
                .createQuery("select m from Movimentacao m where m.conta=:pConta "
                           + "and m.tipo = :pTipo order by m.valor desc");

        query.setParameter("pConta", conta);
        query.setParameter("pTipo", TipoMovimentacao.ENTRADA);

        List<Movimentacao> movimentacoes = query.getResultList();

        for (Movimentacao m : movimentacoes) {
            System.out.println("Descricao: " + m.getDescricao());
            System.out.println("Conta.id:" + m.getValor());
        }
    }


}

Poderiam me ajudar com relação ao erro apresentado acima ? Reescrevi todo o codigo mas nao adiantou.

2 respostas

Boa noite Leornardo, pelo que eu percebi, você está tentando fazer um merge com uma conta que deletou no banco...

conta = em.find(Conta.class, conta.getId());
        em.remove(conta);   <------ Aqui remove

        em.getTransaction().commit();
        em.close();

        EntityManager em2 = new JPAUtil().getEntityManager();
        em2.getTransaction().begin();

        conta.setTitular("Leonardo");
        em2.merge(conta);  <-------- Aqui tenta usar

certo, o que me estranha é que isso ta identico no curso e no video onde eu vejo a aula ( me refiro aqui a aula 6) funciona normalmente no entanto ainda que eu copie e cole o codigo apresentado pelo porfessor o erro persiste. O que eu posso fazer nesse caso? Comentar essa linha que deleta a conta ?