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.