Erro ao deletar registro do banco de dados

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?

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#

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

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.

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

post o seu metodo:

 controle.destroy(idcontrole);  

Assim fica mais facil achar um motivo para o erro.

[]'s

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(); } } }

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?

Como funciona esse cascade?

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

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

:smiley:

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

Agradeço.