Exception executing batch

Sempre quando eu vou executar este trecho do código:

@Override public void Deletar(tab_parc obj) { t = this.s.beginTransaction(); s.delete(getClap(obj));//Este método retorna um objeto que está ligado a tabela tab_parc por uma fk s.delete(obj); t.commit(); //Esta é a linha 47 do CadFuncDao }

Acontece esse erro:

SEVERE: Exception executing batch: org.hibernate.jdbc.BatchedTooManyRowsAffectedException: Batch update returned unexpected row count from update [0]; actual row count: 1922; expected: 1 at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:71) at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:92) at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:87) at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:222) at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2479) at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2697) at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:74) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:146) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) 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 br.inf.topsoft.Dao.CadFuncDao.Deletar(CadFuncDao.java:47)//referencia lá em cima at br.inf.topsoft.Controller.CadFuncCtrl.Deletar(CadFuncCtrl.java:52) at br.inf.topsoft.View.FrmCadFunc.Remover(FrmCadFunc.java:58) at br.inf.topsoft.Forms.FrmCadPrin.adicionaActionPerformed(FrmCadPrin.java:197) at br.inf.topsoft.Forms.FrmCadPrin.access$400(FrmCadPrin.java:13) at br.inf.topsoft.Forms.FrmCadPrin$5.actionPerformed(FrmCadPrin.java:126) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:713) at java.awt.EventQueue.access$000(EventQueue.java:104) at java.awt.EventQueue$3.run(EventQueue.java:672) at java.awt.EventQueue$3.run(EventQueue.java:670) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:686) at java.awt.EventQueue$4.run(EventQueue.java:684) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:683) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

Não sei como resolver isso…

Leu a exception? Ela diz que o processo esperava atualizar apenas 1 linha, mas está tentando fazer em 1922 linhas…
Ou seja, há algo de errado que não está certo no teu SQL.

Eu estou usando o Hibernate e pra deletar eu uso esta linha:

Onde…

CadFuncCtrl é a classe de Controle, que tem o método deletar que envia para CadFuncDao

model é o TableModel e getRegistro retorna o objeto com parâmetro o inteiro do índice

getDados() é o método que retorna a table

Não entendo como a SQL pode ter saído errado

Consegui resolver…

Era um erro muito específico, a linha do cliente que eu estava tentando deletar tinha movimentação comercial, então ele estava vinculado a 1922 vendas e compras.

No caso vou ter de achar um jeito alternativo pois o cascade iria deletar notas fiscais, o que não é muito bom :wink:

Obrigado mesmo assim drsmachado