Olá pessoal, estou tentando fazer uma inserção e uma alteração em um evento.
A inserção é feita, mas ao alterar o registro está aparecendo o erro “Illegal attempt to associate a collection with two open sessions”.
O que estou querendo é que ao inserir na tabela Lançamento, o sistema altere na tabela Aparelho o atributo disponivel para “false”(0).
Segue abaixo os códigos.
Método Salvar
private void b_salvarActionPerformed(java.awt.event.ActionEvent evt) {
boolean validarGravacao = validarDados();
ConLancamento conLanc1 = new ConLancamento();
Date dtLanc = new Date();
SessionFactory exibir1 = new Configuration()
.setProperty("hibernate.show_sql", "true")
.setProperty("hibernate.format_sql", "true")
.configure("hibernate.cfg.xml")
.buildSessionFactory();
Session sessao = exibir1.openSession();// Iniciando, abrindo sessão
listaAparelho = sessao.createQuery("from ConAparelho where apaNumTi = '"+tf_etiqueta.getText().toUpperCase()+"'").list();
conAparelho = listaAparelho.get(0);
exibir1.close(); // Fechando sessção
int codAp = conAparelho.getApaCod();
System.out.println("Cod aparelho: "+codAp);
System.out.println("Aparelho disponível: "+conAparelho.isApaDisponivel());
System.out.println("Cod Rca: "+tf_codRca.getText());
System.out.println("Dt. Lanc: "+dtLanc);
System.out.println("Obs: "+tf_obs.getText());
if(validarGravacao == true){
conRca.setRcaCod(Integer.parseInt(tf_codRca.getText()));
conAparelho.setApaCod(codAp);
conAparelho.setApaDisponivel(false);
conLanc1.setConRca(conRca);
conLanc1.setConAparelho(conAparelho);
conLanc1.setLanDtLanc(dtLanc);
conLanc1.setLanObs(tf_obs.getText());
try{
DaoLancamento daoLanc = new DaoLancamento(conLanc1);
DaoLancamento daoApa = new DaoLancamento(conAparelho);
daoLanc.Inserir();
daoApa.Atualizar();
limparDados();
model.adicionar(conLanc1);
model.ordernarPorSupervisor();
}
catch(Exception erro){
JOptionPane.showMessageDialog(rootPane, "Erro ao salvar registro: "+erro.getCause());
}
}
}
Métodos Salvar e Atualizar da classe DAO:
@Override
public void Inserir() {
Session sessao1 = (Session)HibernateUtil.getSessionFactory().openSession();
try
{
transacao = sessao1.beginTransaction();//faz a tranzação e inicia a sessão do hibernate
sessao1.save(controle);//atualizando os dados antigos que o objeto (sis_drs) contem para os atuais...
transacao.commit();//agora garantindo a gravação
sessao1.close();//fechando a sessão
JOptionPane.showMessageDialog(null, "Registro salvo com sucesso!");
}
catch(ConstraintViolationException erro ){
JOptionPane.showMessageDialog(null, "Erro de constrantes: "+erro.getCause());
transacao.rollback();
erros = true;
}
catch(HibernateException | HeadlessException erro){
JOptionPane.showMessageDialog(null, "Erro ao salvar: "+erro.getCause());
transacao.rollback();
erros = true;
}
catch(Exception erro){
JOptionPane.showMessageDialog(null, "Erro ao salvar: "+erro.getCause().toString());
transacao.rollback();
erros = true;
}
}
@Override
public void Atualizar() {
Session sessao1 = (Session)HibernateUtil.getSessionFactory().openSession();
try
{
transacao = sessao1.beginTransaction();//faz a tranzação e inicia a sessão do hibernate
sessao.update(controle);//atualizando os dados antigos que o objeto (sis_drs) contem para os atuais...
transacao.commit();//agora garantindo a gravação
sessao1.close();//fechando a sessão
JOptionPane.showMessageDialog(null, "Registro atualizado com sucesso!");
}
catch(HibernateException | HeadlessException erro)
{
JOptionPane.showMessageDialog(null, "Erro atualizar: "+erro.getMessage());
transacao.rollback();
erros = true;
}
catch(Exception erro){
JOptionPane.showMessageDialog(null, "Erro atualizar: "+erro.getMessage());
transacao.rollback();
erros = true;
}
}
A inserção está sendo feita normalmente, mas da erro ao tentar alterar.