Problema ao remover objeto com o hibernate

1 resposta
A

Estou tendo problemas com uma aplicação que estou desenvolvendo com o netbeans 5.5.1 e hibernate 3.2.1.

O problemas está ocorrendo quando tento remover um objeto, da seguinte forma:
public void remove(Endereco end) {
        EntityManager em = JPAUtil.getInstance().getEntityManager();
        
        end = em.merge(end);
        em.remove(end);
        
        em.getTransaction().commit();
        em.close();
    }
O método de teste é o seguinte
public void testRemove() throws Exception {
        System.out.println("remove: remoção de registro de cliente da base de dados");
        
        Random rn = new Random();
        Endereco end = setPropEnd(clienteAtual,"Centro","Curitiba","Rua das Camélias, 15"+rn.nextInt(300),true,"PR",0,1);
        EnderecoDAO endDAO = new EnderecoDAOImpl();

        int endId = endDAO.add(end);
        Endereco end2 = endDAO.getById(endId);
        endDAO.remove(end2);
        

        Endereco end1 = endDAO.getById(endId);
        assertNull(end1);
    }

O erro que está retornando é o seguinte:

Error while commiting the transaction
javax.persistence.RollbackException: Error while commiting the transaction
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)
at br.com.escriba.jmala.dao.EnderecoDAOImpl.remove(EnderecoDAOImpl.java:88)
at br.com.escriba.jmala.dao.interfaces.EnderecoDAOTest.testRemove(EnderecoDAOTest.java:256)
Caused by: org.hibernate.ObjectDeletedException: deleted entity passed to persist: [br.com.escriba.jmala.entity.Endereco#]
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:90)
at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:644)
at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:636)
at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:323)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131)
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
... 17 more

Bom, já dei uma boa pesquisada na Internet e até agora não encontrei nada de útil. Será que isso pode ser um BUG do hibernate?

1 Resposta

T

Olá aribas!!!

Blz?

Cara, dá uma olhadinho no link abaixo que vai te ajudar.


http://www.guj.com.br/posts/list/72968.java#383584

O problema pode estar relacionado aos estados persistentes do hibernate e/ou da JPA.

Você está tentando remover um objeto detached com o id preenchido.

Para solucionar o problema, você precisa mandar remover a instância que é managed.

Espero ter ajudado!!!

[]'s

Tubarão

Criado 13 de novembro de 2007
Ultima resposta 13 de nov. de 2007
Respostas 1
Participantes 2