在commit()或flush()之后是否有处理PersistenceExceptions的“最佳实践”方法?
按照我的理解,在 PersistenceException 之后,事务在任何情况下都将回滚,所以最好的方法是什么:我是否尝试在catch-block,或者我只是记录警告/错误并告诉用户重试?或者完全是别的什么?
最佳答案
do I try to merge() and commit() again in the catch-block,
这不太可能奏效。当然,它在当前事务的上下文中不起作用。
or do i just log a warning/error and tell the user to try again?
当然要记录错误/警告。是否告诉用户重试取决于提交失败的原因。如果您对可能的原因没有深入了解,那么建议用户应该重试是......可疑的。
Or something else entirely?
如果您可以准确地诊断异常的原因(至少在某些情况下),您可以使用它来决定要做什么。但情况可能会变得复杂。基本上,您需要区分根本原因是:
- 用户输入错误,
- 由于某些其他事务提交而导致的过时数据等,或者
- 应用程序中的错误、死锁等,重试是不明智的。
(无论如何,有些用户可能会重试......无论应用程序建议什么。)
关于java - 如何处理调用commit()或flush()后的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16633658/