Hibernate + JPA

5 respostas
nieri

Pessoal eu criei um jTable e ao clicar duas vezes em uma das linhas
o item deve ser excluido, porem quando chega no meu DAO para
executar o delete esta retornando o erro abaixo:

Exception in thread AWT-EventQueue-0 java.lang.IllegalArgumentException: Removing a detached instance br.com.jcomputacao.contaspagar.LeituraDados#1

at org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:45)

at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:86)

at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)

at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:766)

at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:744)

at org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:253)

se alguem puder me ajudar a resolver esse problema

meu DAO esta da seguinte forma

public class Dao {

private static EntityManagerFactory emf = null;


static {
    emf = Persistence.createEntityManagerFactory("ContasPagarPU");
}

@SuppressWarnings("unchecked")
public static LeituraDados load(Long id) {
    return emf.createEntityManager().find(LeituraDados.class, id);
}

public static String save(LeituraDados t) {
    EntityManager em = emf.createEntityManager();
    EntityTransaction trans = em.getTransaction();
    trans.begin();
    if (t.getId() == null || t.getId().intValue() == 0) {
        em.persist(t);
    } else {
        t = em.merge(t);
    }
    trans.commit();
    em.close();
    return "salvo";
}

public static String delete(LeituraDados t) {
    EntityManager em = emf.createEntityManager();
    EntityTransaction trans = em.getTransaction();
    trans.begin();
    if (t.getId() != null || t.getId().intValue() != 0) {
        em.remove(t);
    }
    trans.commit();
    em.close();
    return "removido";
}

}

5 Respostas

finotti

http://www.guj.com.br/posts/list/69169.java

Marky.Vasconcelos

Isso por que o bean esta no estado Detached. E voce precisa deixalo em Managed.

public static String delete(LeituraDados t) {
EntityManager em = emf.createEntityManager();
EntityTransaction trans = em.getTransaction();
trans.begin();
LeituraDados dados = load(t.getId());

em.remove(dados);

trans.commit();
em.close();
return "removido";
}
}
nieri

Mark eu tentei da forma que vc postou
mas o erro continua

nieri

Pessoal resolvi o problema

public static String delete(LeituraDados t) {

EntityManager em = emf.createEntityManager();

EntityTransaction trans = em.getTransaction();

trans.begin();

Object c = em.merge(t);

em.remove©;

trans.commit();

em.close();

return removido;

}

muito obrigado pela ajuda
abrazz

vinicius8891

Valeu galera, estava com o mesmo problema ao tentar excluir um ou mais registros de uma lista, usando JPA…

Consegui resolver dessa forma problema resolvido aqui também!

EntityManager entityManager = PersistenceUtil.getCurrentEntityManager();
		try {
			PersistenceUtil.beginTransaction();
			Object object = entityManager.merge(categoria);
			entityManager.remove(object);
			PersistenceUtil.commitTransaction();
		} catch (Exception e) {
			System.out.println(e);
		}
Criado 16 de julho de 2009
Ultima resposta 29 de mar. de 2012
Respostas 5
Participantes 4