realmente roger_rf está acontecendo isso. Olha o sql que consegui pegar do Hibernate.
Hibernate: select tipousuari0_.tusu_codigo as tusu1_8_0_, tipousuari0_.tusu_descricao as tusu2_8_0_ from tipo_usuario tipousuari0_ where tipousuari0_.tusu_codigo=?
Hibernate: select usuariocol0_.tusu_codigo as tusu4_1_, usuariocol0_.usu_codigo as usu1_1_, usuariocol0_.usu_codigo as usu1_24_0_, usuariocol0_.tusu_codigo as tusu4_24_0_, usuariocol0_.usu_senha as usu2_24_0_, usuariocol0_.usu_usuario as usu3_24_0_ from usuario usuariocol0_ where usuariocol0_.tusu_codigo=?
Hibernate: select cabvendasc0_.usu_codigo as usu10_2_, cabvendasc0_.cab_codigo as cab1_2_, cabvendasc0_.cab_codigo as cab1_23_1_, cabvendasc0_.cab_acrescimo as cab2_23_1_, cabvendasc0_.cab_data as cab3_23_1_, cabvendasc0_.cab_desconto as cab4_23_1_, cabvendasc0_.cab_nf as cab5_23_1_, cabvendasc0_.cab_num_parcelas as cab6_23_1_, cabvendasc0_.cab_total as cab7_23_1_, cabvendasc0_.cab_valor as cab8_23_1_, cabvendasc0_.cli_codigo as cli9_23_1_, cabvendasc0_.usu_codigo as usu10_23_1_, cliente1_.cli_codigo as cli1_36_0_, cliente1_.cli_apelido as cli2_36_0_, cliente1_.cli_cargo as cli3_36_0_, cliente1_.cli_cpf_cnpj as cli4_36_0_, cliente1_.cli_data_registro as cli5_36_0_, cliente1_.cli_email as cli6_36_0_, cliente1_.cli_empregador as cli7_36_0_, cliente1_.cli_fone_ref1 as cli8_36_0_, cliente1_.cli_fone_ref2 as cli9_36_0_, cliente1_.cli_inscricao_estadual as cli10_36_0_, cliente1_.cli_limite_credito as cli11_36_0_, cliente1_.cli_mae as cli12_36_0_, cliente1_.cli_nascimento as cli13_36_0_, cliente1_.cli_nome as cli14_36_0_, cliente1_.cli_observacoes as cli15_36_0_, cliente1_.cli_org_expedidor_rg as cli16_36_0_, cliente1_.cli_refcomercial1 as cli17_36_0_, cliente1_.cli_refcomercial2 as cli18_36_0_, cliente1_.cli_rg as cli19_36_0_, cliente1_.cli_setor as cli20_36_0_, cliente1_.cli_sexo as cli21_36_0_, cliente1_.cli_situacao as cli22_36_0_, cliente1_.cli_status as cli23_36_0_, cliente1_.cli_tipo as cli24_36_0_, cliente1_.cli_uf_rg as cli25_36_0_ from cab_vendas cabvendasc0_ inner join cliente cliente1_ on cabvendasc0_.cli_codigo=cliente1_.cli_codigo where cabvendasc0_.usu_codigo=?
Hibernate: select entradapro0_.usu_codigo as usu12_10_, entradapro0_.ent_codigo as ent1_10_, entradapro0_.ent_codigo as ent1_4_9_, entradapro0_.ent_aliq_icms as ent2_4_9_, entradapro0_.ent_data_entrada as ent3_4_9_, entradapro0_.ent_data_real as ent4_4_9_, entradapro0_.ent_num_nf as ent5_4_9_, entradapro0_.ent_qtd_produto as ent6_4_9_, entradapro0_.ent_status as ent7_4_9_, entradapro0_.ent_total as ent8_4_9_, entradapro0_.ent_vlr_unitario as ent9_4_9_, entradapro0_.forn_codigo as forn10_4_9_, entradapro0_.prod_codigo as prod11_4_9_, entradapro0_.usu_codigo as usu12_4_9_, fornecedor1_.forn_codigo as forn1_37_0_, fornecedor1_.end_codigo as end6_37_0_, fornecedor1_.forn_cnpj as forn2_37_0_, fornecedor1_.forn_email as forn3_37_0_, fornecedor1_.forn_inscricao_estadual as forn4_37_0_, fornecedor1_.forn_razao_social as forn5_37_0_, endereco2_.end_codigo as end1_2_1_, endereco2_.bai_codigo as bai4_2_1_, endereco2_.cep_codigo as cep5_2_1_, endereco2_.end_complemento as end2_2_1_, endereco2_.end_numero as end3_2_1_, endereco2_.log_codigo as log6_2_1_, endereco2_.tend_codigo as tend7_2_1_, produto3_.prod_codigo as prod1_11_2_, produto3_.cor_codigo as cor19_11_2_, produto3_.marca_codigo as marca20_11_2_, produto3_.prod_aliquota_tributacao as prod2_11_2_, produto3_.prod_aplicacao as prod3_11_2_, produto3_.prod_cod_barras as prod4_11_2_, produto3_.prod_descricao as prod5_11_2_, produto3_.prod_dimensao as prod6_11_2_, produto3_.prod_estoque_maximo as prod7_11_2_, produto3_.prod_estoque_minimo as prod8_11_2_, produto3_.prod_foto as prod9_11_2_, produto3_.prod_lucro_venda as prod10_11_2_, produto3_.prod_lucro_venda_atacado as prod11_11_2_, produto3_.prod_porcentagem as prod12_11_2_, produto3_.prod_porcentagem_atacado as prod13_11_2_, produto3_.prod_preco_custo as prod14_11_2_, produto3_.prod_preco_venda as prod15_11_2_, produto3_.prod_preco_venda_atacado as prod16_11_2_, produto3_.prod_qtd_atacado as prod17_11_2_, produto3_.prod_tributacao as prod18_11_2_, produto3_.subg_codigo as subg21_11_2_, produto3_.uni_codigo as uni22_11_2_, produto3_.z_codigo as z23_11_2_, cor4_.cor_codigo as cor1_16_3_, cor4_.cor_descricao as cor2_16_3_, marca5_.marca_codigo as marca1_10_4_, marca5_.marca_descricao as marca2_10_4_, subgrupo6_.subg_codigo as subg1_13_5_, subgrupo6_.gru_codigo as gru3_13_5_, subgrupo6_.subg_descricao as subg2_13_5_, unidade7_.uni_codigo as uni1_30_6_, unidade7_.uni_descricao as uni2_30_6_, unidade7_.uni_sigla as uni3_30_6_, localz8_.z_codigo as z1_6_7_, localz8_.y_codigo as y3_6_7_, localz8_.z_descricao as z2_6_7_, estoque9_.prod_codigo as prod1_9_8_, estoque9_.est_data_movimentacao as est2_9_8_, estoque9_.est_quantidade as est3_9_8_ from entrada_produtos entradapro0_ inner join fornecedor fornecedor1_ on entradapro0_.forn_codigo=fornecedor1_.forn_codigo left outer join endereco endereco2_ on fornecedor1_.end_codigo=endereco2_.end_codigo inner join produto produto3_ on entradapro0_.prod_codigo=produto3_.prod_codigo left outer join cor cor4_ on produto3_.cor_codigo=cor4_.cor_codigo left outer join marca marca5_ on produto3_.marca_codigo=marca5_.marca_codigo left outer join sub_grupo subgrupo6_ on produto3_.subg_codigo=subgrupo6_.subg_codigo left outer join unidade unidade7_ on produto3_.uni_codigo=unidade7_.uni_codigo left outer join local_z localz8_ on produto3_.z_codigo=localz8_.z_codigo left outer join estoque estoque9_ on produto3_.prod_codigo=estoque9_.prod_codigo where entradapro0_.usu_codigo=?
Hibernate: select usulogcoll0_.usu_codigo as usu5_1_, usulogcoll0_.usulog_codigo as usulog1_1_, usulogcoll0_.usulog_codigo as usulog1_25_0_, usulogcoll0_.usu_codigo as usu5_25_0_, usulogcoll0_.usulog_data as usulog2_25_0_, usulogcoll0_.usulog_hora as usulog3_25_0_, usulogcoll0_.usulog_serialhd as usulog4_25_0_ from usu_log usulogcoll0_ where usulogcoll0_.usu_codigo=?
Hibernate: delete from usu_log where usulog_codigo=?
Hibernate: delete from usuario where usu_codigo=?
Hibernate: delete from tipo_usuario where tusu_codigo=?
Hibernate: select tipousuari0_.tusu_codigo as tusu1_8_, tipousuari0_.tusu_descricao as tusu2_8_ from tipo_usuario tipousuari0_ order by tipousuari0_.tusu_descricao
Hibernate: select tipousuari0_.tusu_codigo as tusu1_8_, tipousuari0_.tusu_descricao as tusu2_8_ from tipo_usuario tipousuari0_ order by tipousuari0_.tusu_descricao
Moral da Historia ele passa apagando os filhos todos e depois apaga o tipo do usuario! Sou novato em JPA e tenho muitas duvidas, percebi tbm que quando uso o CascadeType.MERGE tenho o resultado esperado!
Estou tendo outro problema agora 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 esteja devidamente anotadas e está tudo funcionado na hora de salva e alterar porem na hora de excluir estou tendo a seguinte exceção:
14/10/2009 10:37:54 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:1251)
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)
14/10/2009 10:37:54 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
SEVERE: Could not synchronize database state with session
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:1251)
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)
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Transaction not active
at org.hibernate.ejb.TransactionImpl.rollback(TransactionImpl.java:82)
at Visao.Cadastros.FrmProduto.Excluir(FrmProduto.java:1254)
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)
anotações utilizadas no relacionamento ManyToMany
//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();
}
}