我正在处理一个为分布式事务配置的现有项目。
该项目正在使用 Hibernate,但由于某些历史原因,我正在处理的部分使用 JDBC 并且需要保持这种方式。
要获得连接,我必须调用一个 API,它会返回休眠会话的 JDBC 连接。
我需要在一个事务中完成一些更新/插入,所以这就是我正在做的事情:
- 在我的连接上将 autoCommit 设置为 false。
- 做我的插入(准备语句,执行查询)
- 调用提交。
在提交时,我得到一个 SQLException,因为显然不允许使用分布式事务显式调用提交/回滚。我应该声明将数据源配置更改为非 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 {
//.....
}
谢谢