Preciso fazer com insira em duas tables ao executar o método insere a seguir, ele está inserindo, mas quando simulo um erro ele insere numa tabela e não na outra, ou seja, não está funcionando a transação
Arquivo AcessoDAO.java
public boolean insere(Object obj) throws SQLException,Exception {
// TODO Auto-generated method stub
try{
@SuppressWarnings(“unused”)
SimpleDateFormat formataData = new SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”);
AcessoHp acessoHp = (AcessoHp) obj;
conected.setAutoCommit(false);
acessoHp.setIdAcesso(super.insereAcesso(acessoHp));
ps = this.conected.prepareStatement(“INSERT INTO TSYS_acessoHP(”
+ “TSYS_acessoHP.idAcesso,”
+ “TSYS_acessoHP.label,”
+ “TSYS_acessoHP.link,”
+ “TSYS_acessoHP.acessoPai) VALUES(?,?,?,?)”);
ps.setInt(1, acessoHp.getIdAcesso());
ps.setString(2, acessoHp.getLabel());
ps.setString(3, acessoHp.getLink());
ps.setInt(4, acessoHp.getAcessoPai().getIdAcesso());
ps.execute();
conected.commit();
} catch (SQLException sql) {
System.out.println("Erro AcessoHPDAO SQL em: " + sql.getMessage());
System.out.println("Erro AcessoHPDAO SQL tipo: " + sql.getSQLState());
System.out.println("Erro AcessoHPDAO SQL código: " + sql.getErrorCode());
conected.setAutoCommit(true);
throw new SQLException(sql.getNextException());
} catch (Exception e) {
// TODO: handle exception
System.out.println("Exceção AcessoHPDAO mensagem: " + e.getMessage());
System.out.println("Exceção AcessoHPDAO local: " + e.getLocalizedMessage());
System.out.println("Exceção AcessoHPDAO causa: " + e.getCause());
conected.setAutoCommit(true);
conected.rollback();
throw new Exception(e.getCause());
} finally {
conected.setAutoCommit(true);
conected.close();
//rs.close();
ps.close();
}
return true;
}
Arquivo AcessoHpDAO.java
public int insereAcesso(Object obj) throws SQLException,Exception {
// TODO Auto-generated method stub
int idReturn = 0;
try{
Acesso acesso = (Acesso) obj;
conected.setAutoCommit(true);
ps = this.conected.prepareStatement("DECLARE @idAcesso INT " +
"INSERT INTO TSYS_acesso(TSYS_acesso.tipoAcesso) " +
"VALUES(?) " +
"SET @idAcesso = @@IDENTITY " +
“SELECT @idAcesso AS idAcesso”);
ps.setInt(1, acesso.getTipoAcesso().getIdAcesso());
conected.setAutoCommit(false);
conected.commit();
rs = ps.executeQuery();
rs.next();
idReturn = rs.getInt(“idAcesso”);
/* ps = this.conected.prepareStatement("INSERT INTO TSYS_acesso(TSYS_acesso.tipoAcesso) " +
"VALUES(?)");
ps.setInt(1, acesso.getTipoAcesso().getIdAcesso()); */
ps.execute();
conected.commit();
} catch (SQLException sql) {
System.out.println("Erro AcessoDAO SQL em: " + sql.getMessage());
System.out.println("Erro AcessoDAO SQL tipo: " + sql.getSQLState());
System.out.println("Erro AcessoDAO SQL código: " + sql.getErrorCode());
conected.setAutoCommit(true);
conected.rollback();
throw new SQLException(sql.getNextException());
} catch (Exception e) {
System.out.println("Exceção AcessoDAO mensagem: " + e.getMessage());
System.out.println("Exceção AcessoDAO local: " + e.getLocalizedMessage());
System.out.println("Exceção AcessoDAO causa: " + e.getCause());
conected.setAutoCommit(true);
conected.rollback();
throw new Exception(e.getCause());
} finally {
conected.setAutoCommit(true);
conected.close();
ps.close();
rs.close();
}
return idReturn;
}
Alguém tem alguma dica sobre isso?