在commit()或flush()之后是否存在处理PersistenceExceptions的“最佳实践”?
我理解它的方式,在PersistenceException之后,事务将在任何情况下回滚,所以最好的方法是:我尝试再次合并()和commit() catch-block,或者我只是记录警告/错误并告诉用户再试一次?或完全不同的东西?
答案 0 :(得分:2)
我是否尝试在catch-block中再次合并()和commit(),
这不太可行。当然,它不适用于当前交易。
或者我只是记录警告/错误并告诉用户再试一次?
当然记录错误/警告。是否告诉用户再试一次,取决于提交失败的原因。如果您对可能的原因没有一些了解,建议用户再试一次是......可疑。
还是别的什么呢?
如果您可以准确地诊断异常的原因(至少在某些情况下),您可以使用它来决定要做什么。但它可能变得复杂。基本上,您需要区分导致根本原因的案例:
(无论应用程序建议什么,有些用户可能会重试......)
答案 1 :(得分:1)
您通常唯一能做的就是记录问题并告知用户。 正如您已经提到的,正在进行的事务被标记为仅回滚。因此,任何进一步的数据库更改都是毫无意义的。
同时使你正在使用XA事务(分布式事务),即。配置所有内容以使用JTA事务管理器,因此只参与一个事务。如果您使用多个事务感知资源(两个数据库,db + jms等),则确实需要这样做。