我的情况是我们更新实体数据,然后根据某些类型的更新,我们也可以更新另一个实体。
在某些情况下,第二个条目中的更新可能由于某些原因而失败并抛出异常。
问题是如何处理这种情况,因为我们想要回滚在第一个实体中完成的更改。
我们无法将更新推迟到第一个条目,直到第二个条目更新。
在目前的情况下,如果发生这种情况,那么
一旦代码到达下面的块,那么它将提交第一个条目更改,即使第二个实体更新中存在失败。那么如何回滚?如果第二次实体更新失败,我认为不关闭persistentManager是不正确的选择。
finally {
try {
if (pm != null && pm.isClosed() == false )
pm.close();
} catch (Exception e) {
log.severe("Exception in finally of execute of updateDonor");
log.severe("Exception class is :" + e.getClass().getName());
log.severe("Exception is :" + e.getMessage());
throw new Exception(e.getMessage()
+ "Unable to close persistence manager");
}
log.info("end of updateDonor");
}
答案 0 :(得分:1)
我不确定我是否完全理解您的情况,但是cross-group(XG)交易,它允许将交易应用于来自多个实体组的实体,是您正在寻找的?在this page上搜索'跨群组交易。使用XG事务,对事务所包含的实体的所有更改都会通过,或者不执行任何更改。