Erro ao tentar gravar no banco usando hibernate

1 resposta
higornucci

Tenho uma classe chamada Pagamentos, onde pode ser executado um pagamento para uma das empresas cadastradas de acordo com o serviço prestado. Isso quer dizer que Empresa e Servico são outras duas classes modelo que persistem no banco.

No momento em que confirmo o pagamento, o seguinte erro aparece.

Exception in thread "AWT-EventQueue-0" org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
        at org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:432)
        at org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:66)
        at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:124)
        at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:84)
        at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:78)
        at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:146)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:316)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:112)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
        at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:534)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:526)
        at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
        at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
        at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:454)
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
        at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
        at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
        at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550)
        at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546)
        at br.com.guaicurus.dao.DAO.adiciona(DAO.java:26)
        at br.com.guaicurus.visao.Pagamentos.jButtonConfirmarActionPerformed(Pagamentos.java:351)
        at br.com.guaicurus.visao.Pagamentos.access$100(Pagamentos.java:27)
        at br.com.guaicurus.visao.Pagamentos$2.actionPerformed(Pagamentos.java:159)
        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: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:2475)
        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)

Esta é a view Pagamentos

public class Pagamentos extends javax.swing.JFrame {

    /** Creates new form ContasPagar */
    public Pagamentos() {
        initComponents();

        setLocationRelativeTo(null);

        DAO daoE = new DAOFactory().getEmpresaDAO();
        DAO daoS = new DAOFactory().getServicoDAO();
        DAOFactory factory = new DAOFactory();

        factory.beginTransaction();
        List<Empresa> lista1 = daoE.listaTudo();
        for(Empresa empresas : lista1) {
            this.jComboBoxEmpresa.addItem(empresas.getFantasia());
        }

        this.jComboBoxServico.addItem("");
        List<Servico> lista2 = daoS.listaTudo();
        for(Servico servicos : lista2) {
            this.jComboBoxServico.addItem(servicos.getDescrição());
        }

        factory.close();
    }

    private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                                
        // TODO add your handling code here:
        dispose();
    }                                               

    private void jButtonNovoActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:
        this.jTextFieldFornecedor.setText(null);
        this.jTextFieldValor.setText(null);
        this.jRadioButtonAPrazo.setSelected(false);
        this.jRadioButtonAVista.setSelected(false);
        this.jFormattedTextFieldVencimento.setText(null);
    }                                           

    private void jButtonConfirmarActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        // TODO add your handling code here:
        Date vencimento;
        String data;
        String fornecedor;
        Double valor;
        String tipoPagamento;
        String pago;
        String empresa;
        String servico;
        Empresa e = null;
        Servico s = null;

        empresa = this.jComboBoxEmpresa.getSelectedItem().toString();
        data = this.jFormattedTextFieldVencimento.getText();
        Data pegarData = new Data();
        vencimento = pegarData.getData(data);
        System.out.println(vencimento);
        fornecedor = this.jTextFieldFornecedor.getText();
        valor = Double.parseDouble(this.jTextFieldValor.getText());
        if (this.jRadioButtonAPrazo.isSelected()) {
            tipoPagamento = "À Vista";
            pago = "S";
        } else {
            tipoPagamento = "À Prazo";
            pago = "N";
        }
        servico = this.jComboBoxServico.getSelectedItem().toString();
        
        DAO daoEmpresa = new DAOFactory().getEmpresaDAO();
        DAO daoServico = new DAOFactory().getServicoDAO();

        DAOFactory factory = new DAOFactory();

        factory.beginTransaction();

        List<Empresa> listaEmpresa = daoEmpresa.listaTudo();
        for(Empresa empresas : listaEmpresa) {
            if(empresa.equals(empresas.getFantasia())){
                e = empresas;
            }
        }

        List<Servico> listaServico = daoServico.listaTudo();
        for(Servico servicos : listaServico) {
            if(servico.equals(servicos.getDescrição())) {
                s = servicos;
            }
        }

        DAO daoContasPagar = new DAOFactory().getContasPagarDAO();

        ContasPagar contasPagar = new ContasPagar();
        contasPagar.setFornecedor(fornecedor);
        contasPagar.setPago(pago);
        contasPagar.setEmpresa(e);
        if(!servico.equals("")) {
            contasPagar.setServico(s);
        }
        contasPagar.setTipoPagamento(tipoPagamento);
        contasPagar.setValor(valor);
        contasPagar.setVencimento(vencimento);

        daoContasPagar.adiciona(contasPagar);

        factory.commit();
        
        factory.close();

    }                                                

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Pagamentos().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     

}

Alguém sabe onde estou errando? Não consigo enxergar o erro.

Grato a todos que colaborarem.

1 Resposta

higornucci

Back on top =D

Estou desde as 7am tentando descobrir esse erro…e preciso pra amanhã. Será que alguem sabeo que pode ser?

Criado 28 de fevereiro de 2010
Ultima resposta 28 de fev. de 2010
Respostas 1
Participantes 1