Salve galera…Estou enfrentando um problema que até agora não consegui encontrar uma solução.
É o seguinte, estou usando Hibernate e criei um método para Inserir e outro para Alterar informações do meu BD, então eu criei 2 métodos com SwingWorker para executar em background esses métodos de Inserir/Alterar.
O problema é que quando executo os métodos Inserir/Alterar fora do SwingWorker, eles dão o commit() normalmente no BD e alteram na hora, com o SwingWorker não, eu preciso fechar e abrir meu sistema para ver as alterações feitas, não sei o pq disso acontecer pq em teoria o SwingWorker só deveria executá-los em background.
Aqui vai meu código.
//metodo para Inserir
public void insereVinculaPerfilModuloPermissoes(){
//este metodo vincula o perfil ao módulo com as permissões
Session sessao = new RetornaSessaoHibernate().hibernateSession();
sessao.beginTransaction();
Yperfil perfil = new Yperfil();
perfil.setId(Long.parseLong(codPerfil.getText()));
progresso.setMinimum(0);
progresso.setMaximum(gridPermissoesPorModulo.getRowCount());
for(int x = 0; x < gridPermissoesPorModulo.getRowCount(); x++){
Yperfilmodulo yPerfilModulo = new Yperfilmodulo();
Ymodulos modulo = new Ymodulos();
String codMod = (String)gridPermissoesPorModulo.getModel().getValueAt(x, 0);
modulo.setId(Long.parseLong(codMod));
yPerfilModulo.setYperfil(perfil);
yPerfilModulo.setYmodulos(modulo);
yPerfilModulo.setInserir(gridPermissoesPorModulo.getModel().getValueAt(x, 2).toString());
yPerfilModulo.setAlterar(gridPermissoesPorModulo.getModel().getValueAt(x, 3).toString());
yPerfilModulo.setConsultar(gridPermissoesPorModulo.getModel().getValueAt(x, 4).toString());
yPerfilModulo.setImprimir(gridPermissoesPorModulo.getModel().getValueAt(x, 5).toString());
sessao.save(yPerfilModulo);
progresso.setValue(x);
}
sessao.getTransaction().commit();
}
//metodo para Alterar
public void alteraVinculaPerfilModuloPermissoes(){
//este método altera as permissoes que o perfil ja possui
Session sessao = new RetornaSessaoHibernate().hibernateSession();
sessao.beginTransaction();
btnInserir1.setEnabled(false);
btnAlterar1.setEnabled(false);
btnSair1.setEnabled(false);
DefaultTableModel tabela = (DefaultTableModel)gridPermissoesPorModulo.getModel();
progresso.setMinimum(0);
progresso.setMaximum(gridPermissoesPorModulo.getRowCount());
SQLQuery query = sessao.createSQLQuery("UPDATE yperfilmodulo "
+ "SET inserir = :inserir, alterar = :alterar, consultar = :consultar, imprimir = :imprimir "
+ "WHERE yperfilmodulo.idperfil = :idperfil "
+ "AND yperfilmodulo.idmodulo = :idModulo"
);
query.setParameter("idperfil", Long.parseLong(codPerfil.getText()));
for(int x = 0; x < tabela.getRowCount(); x++){
Ymodulos modulos = new Ymodulos();
modulos.setId(Long.valueOf((String)gridPermissoesPorModulo.getValueAt(x, 0)));
query.setParameter("idModulo", modulos.getId());
query.setParameter("inserir", gridPermissoesPorModulo.getValueAt(x, 2).toString());
query.setParameter("alterar", gridPermissoesPorModulo.getValueAt(x, 3).toString());
query.setParameter("consultar", gridPermissoesPorModulo.getValueAt(x, 4).toString());
query.setParameter("imprimir", gridPermissoesPorModulo.getValueAt(x, 5).toString());
query.executeUpdate();
progresso.setValue(x);
}
sessao.getTransaction().commit();
}
//aqui os SwingWorker
public void inserePermissoesWorker(){
//worker que insere as permissões do perfil no BD
progresso.setVisible(true);
progresso.setStringPainted(true);
SwingWorker w = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
btnInserir1.setEnabled(false);
btnAlterar1.setEnabled(false);
btnSair1.setEnabled(false);
insereVinculaPerfilModuloPermissoes(); //chama metodo para Inserir
return null;
}
protected void done(){
btnInserir1.setEnabled(true);
btnAlterar1.setEnabled(true);
btnSair1.setEnabled(true);
progresso.setIndeterminate(false);
progresso.setValue(0);
progresso.setVisible(false);
}
};
w.execute();
}
public void alteraPermissoesWorker(){
//worker que altera as permissões do perfil no BD
progresso.setVisible(true);
progresso.setStringPainted(true);
SwingWorker w = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
btnInserir1.setEnabled(false);
btnAlterar1.setEnabled(false);
btnSair1.setEnabled(false);
alteraVinculaPerfilModuloPermissoes(); //chama metodo para Alterar
return null;
}
protected void done(){
btnInserir1.setEnabled(true);
btnAlterar1.setEnabled(true);
btnSair1.setEnabled(true);
progresso.setIndeterminate(false);
progresso.setValue(0);
progresso.setVisible(false);
}
};
w.execute();
}
//aqui onde invoco o SwingWorker para Inserir
private void btnInserir1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
int codP = Integer.parseInt(codPerfil.getText());
if(codP <= 0){
JOptionPane.showMessageDialog(null, "Escolha o perfil que deseja dar as permissões", "Informação", 1, new Metodos().alertaImg("alerta"));
codPerfil.requestFocus();
codPerfil.selectAll();
}else{
//insereVinculaPerfilModuloPermissoes(); //aqui chamo sem passar pelo SwingWorker, isto funciona 100%, não precisa fechar e abrir o sistema
inserePermissoesWorker(); //aqui chamo pelo SwingWorker, so funciona exibe as alteracoes depois que fecho e abro o sistema.
}
}
Bem galera, não sei o pq disso acontecer, alguma sugestão ???
obrigado