java - 如何处理调用commit()或flush()后的异常

标签 java jpa exception

在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/

相关文章:

java - 斯坦福NLP OpenIE 4错误

java - jpa中@ColumnDefault的值字段是什么?

java - @Transactional 创建一个新的引用脏对象,即使它没有被修改

android - 异步任务中的空指针错误

java - 无法在 Ubuntu 14.04 中启动 Carrot2 工作台

Java 'finally'异常抛出规则

java - 如何在 Tomcat 上制作服务器范围的过滤器?

java - JPA 不插入数据库,为什么?

python - 一种方法允许引发多种类型的异常还是只引发一种更好?

C#:提供内容的 HttpListener 错误