我正在处理一个已配置为分布式事务的项目。
该项目使用Hibernate,但由于历史原因,我要处理的部分使用JDBC,并且需要保持这种方式。
为了获取连接,我必须调用一个API,该API会返回Hibernate Session的JDBC连接。
我需要将一些更新/插入封装在一个事务中,下面是我的步骤:
1.在连接上将autoCommit设置为false。
2.执行插入操作(准备语句、执行查询)。
3.调用commit。
在执行commit时,我会得到一个SQLException,因为显然不能使用分布式事务明确地调用commit/rollback。我应该指出,将数据源配置更改为非XA不是一种选择。
您有任何解决此问题的想法吗?
connexionDiff.setAutoCommit(false);
psInsertLiv = connexionDiff.prepareStatement(reqInsertLivraison);
psInsertLivHisto = connexionDiff.prepareStatement(reqInsertLivraisonHisto);
psSequence = connexionDiff.prepareStatement(reqCleLivraison);
ps = connexionDiff.prepareStatement(requeteRelivraison);
rs = ps.executeQuery();
while(rs.next()) {
rsSequence = psSequence.executeQuery();
while ( rsSequence.next() ) {
sequenceLivraison = rsSequence.getInt(1);
}
psInsertLiv.setInt(1, sequenceLivraison);
psInsertLiv.setInt(2, rs.getInt(1));
psInsertLiv.executeUpdate();
psInsertLivHisto.setInt(1, sequenceLivraison);
psInsertLivHisto.setInt(2, rs.getInt(1));
psInsertLivHisto.executeUpdate();
connexionDiff.commit();
}
} catch (SQLException ex) {
try{
connexionDiff.rollback();
}catch {
//......
}
} finally {
//.....
}
Thx