Erro ao deletar registro do banco de dados

12 respostas
uchiharussi

Daaew pessoal

Seguinte, estou fazendo um software e tenho as telas de cadastro e de exclusao, para isso eu uso o hibernate, todas telas de exclusao estao funcionando exceto uma, cujo codigo esta igual as outras.

for (int i = 0; i < listacontroleSistemas.size(); i++){ if (listacontroleSistemas.get(i).getIdCliente().getId()==Integer.parseInt(idempresa1)){ int idcontrole = listacontroleSistemas.get(i).getId(); try { controle.destroy(idcontrole); } catch (NonexistentEntityException ex) { Logger.getLogger(FormularioCadastroConexoes.class.getName()).log(Level.SEVERE, null, ex); } } }

o Seguinte erro esta ocorrendo:

[color=red]Exception in thread AWT-EventQueue-0 javax.persistence.RollbackException: Error while commiting the transaction

at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)

at controletecnico.Jpa.ControleSistemasJpaController.destroy(ControleSistemasJpaController.java:147)

at multisystems_sis.FormularioControleSistemas.botaoapagaActionPerformed(FormularioControleSistemas.java:671)

at multisystems_sis.FormularioControleSistemas.access$100(FormularioControleSistemas.java:17)

at multisystems_sis.FormularioControleSistemas$2.actionPerformed(FormularioControleSistemas.java:340)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)

at java.awt.Component.processMouseEvent(Component.java:6263)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)

at java.awt.Component.processEvent(Component.java:6028)

at java.awt.Container.processEvent(Container.java:2041)

at java.awt.Component.dispatchEventImpl(Component.java:4630)

at java.awt.Container.dispatchEventImpl(Container.java:2099)

at java.awt.Component.dispatchEvent(Component.java:4460)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)

at java.awt.Container.dispatchEventImpl(Container.java:2085)

at java.awt.Window.dispatchEventImpl(Window.java:2478)

at java.awt.Component.dispatchEvent(Component.java:4460)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Caused by: org.hibernate.ObjectDeletedException: deleted entity passed to persist: [controletecnico.classes.ControleSistemas#]

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)

 30 more

[/color]

ALGUEM PODE AJUDAR?

12 Respostas

felipekeller

Nao conheço muito de hibernate mais provavelmente o erro ocorreu porque a classe ControleSistemas está sem o id dela.

Caused by: org.hibernate.ObjectDeletedException: deleted entity passed to persist: [controletecnico.classes.ControleSistemas#]

como mostra o erro. ControleSistemas#

uchiharussi

Mas a classe ta com o id dela, e na hora do delete, tambem esta com o id certo

felipekeller

Bom se você tem certeza então não sei dizer o que poderia ser, caso não tenha certeza

faça um debug no processo de deletar e veja o id do objeto que está sendo deletado.

Boa Sorte.

uchiharussi

Blzz, Valeu ai pela dica, mas ja debuguei e ta tudo certo, soh nao sei pq nao esta removendo, sendo que nas outras tabelas estao todos metodos iguais.

VAleeu, Obrigadoo

thiagocg

post o seu metodo:

controle.destroy(idcontrole);

Assim fica mais facil achar um motivo para o erro.

[]'s

uchiharussi

public void destroy(Integer id) throws NonexistentEntityException { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); ControleSistemas controleSistemas; try { controleSistemas = em.getReference(ControleSistemas.class, id); controleSistemas.getId(); } catch (EntityNotFoundException enfe) { throw new NonexistentEntityException("The controleSistemas with id " + id + " no longer exists.", enfe); } Empresa idCliente = controleSistemas.getIdCliente(); if (idCliente != null) { idCliente.getControleSistemasCollection().remove(controleSistemas); idCliente = em.merge(idCliente); } Login tecnico = controleSistemas.getTecnico(); if (tecnico != null) { tecnico.getControleSistemasCollection().remove(controleSistemas); tecnico = em.merge(tecnico); } em.remove(controleSistemas); em.getTransaction().commit(); } finally { if (em != null) { em.close(); } } }

thiagocg

Nas linhas:

idCliente.getControleSistemasCollection().remove(controleSistemas); e

tecnico.getControleSistemasCollection().remove(controleSistemas);

voce esta removendo o objeto controleSistemas destas coleções, por acaso em nenhuma destas entidades (cliente e tecnico) vc não está fazendo algum cascade para a classe ControleSistemas?

uchiharussi

Como funciona esse cascade?

uchiharussi

thiagocg

Valeu pela dica de antes ali. Di uma pesquisada no cascade e verifiquei que era extamente isso que estava ocorrendo
O metodo tentava apagar tambem o tecnico e a empresa que estavam associados a outras tabelas

Valeuu peja ajuda ai
Abracoos

LucasAdri07

Se possivel coloque [RESOLVIDO] no final do titulo do seu tópico =]

uchiharussi

:smiley:

adrmaster

Cara me diz como vc resolveu este problema?
Pois estou passando pela mesma coisa.

Agradeço.

Criado 17 de março de 2010
Ultima resposta 12 de mai. de 2010
Respostas 12
Participantes 5