Olá galera Estou tendo um problema com relacionamento ManyToMany eu tenho as entidades produto, fornecedor e uma tabela intermediaria produto_fornecedor ate onde eu entendi o jpa faz a gerencia da tabela do meio caso minhas entidades estejam devidamente anotadas e está tudo funcionado na hora de salvar e alterar porem na hora de excluir estou tendo a seguinte exceção:
14/10/2009 15:16:40 org.hibernate.jdbc.BatchingBatcher doExecuteBatch
SEVERE: Exception executing batch:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61)
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 org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
at Persistencia.Conexao.Excluir(Conexao.java:86)
at Visao.Cadastros.FrmProduto.Excluir(FrmProduto.java:1280)
at HerancaVisual.MasterCadastro.jbExcluirActionPerformed(MasterCadastro.java:237)
at HerancaVisual.MasterCadastro.access$800(MasterCadastro.java:20)
at HerancaVisual.MasterCadastro$9.actionPerformed(MasterCadastro.java:109)
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.Component.processMouseEvent(Component.java:6134)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5899)
at java.awt.Container.processEvent(Container.java:2023)
at java.awt.Component.dispatchEventImpl(Component.java:4501)
at java.awt.Container.dispatchEventImpl(Container.java:2081)
at java.awt.Component.dispatchEvent(Component.java:4331)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)
at java.awt.Container.dispatchEventImpl(Container.java:2067)
at java.awt.Window.dispatchEventImpl(Window.java:2458)
at java.awt.Component.dispatchEvent(Component.java:4331)
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)
//Bean Produto
//Configuração personalizada para gerencia de anotação ManyToMany Tabela produto_fornecedor
@ManyToMany(cascade = CascadeType.MERGE, targetEntity=Fornecedor.class)
@JoinTable(name="produto_fornecedor", joinColumns=@JoinColumn(name="prod_codigo"), inverseJoinColumns=@JoinColumn(name="forn_codigo"))
private List<Fornecedor> fornecedores;
//Bean Fornecedor
//Configuração personalizada para gerencia de anotação ManyToMany Tabela produto_fornecedor
@ManyToMany(cascade=CascadeType.MERGE, targetEntity=Produto.class, mappedBy="fornecedores")
@JoinTable(name="produto_fornecedor")
private List<Produto> produtos;
//Codigo do botão excluir
EntityManager manager = null;
try {
manager = Conexao.getConexao();
int codigo = listaProduto.get(consultar.getCodigoPesquisado()).getProdCodigo();
beanProduto = manager.find(Produto.class, codigo);
Conexao.Excluir(beanProduto, manager);
Limpar();
} catch (Exception ex) {
manager.getTransaction().rollback();
Logger.getLogger(FrmProduto.class.getName()).log(Level.SEVERE, null, ex);
}
//metodo Excluir
public static void Excluir(Object objeto, EntityManager manager) throws Exception {
try {
if (JOptionPane.showConfirmDialog(null, "Confirma exclusão?", "Alerta", JOptionPane.WARNING_MESSAGE) == 0) {
manager.getTransaction().begin();
manager.remove(objeto);
manager.getTransaction().commit();
JOptionPane.showMessageDialog(null, "Excluido com sucesso", "", JOptionPane.PLAIN_MESSAGE);
}
} catch (Exception e) {
tratarDbException(e);
manager.getTransaction().rollback();
}
}