【问题标题】:How to override default Spring JPA exception translator behavior?如何覆盖默认的 Spring JPA 异常翻译器行为?
【发布时间】:2013-05-08 07:18:54
【问题描述】:

我不知道这种方法是否最好。但是我有一个需要处理 Spring JPA 存储库(DAO 层)异常的要求。从某种意义上讲,句柄可能是将其传播到 UI 或可能在服务层上执行一些逻辑。

现在,按照目前的情况,来自存储库的所有 SQL 异常都被包装到运行时异常 DataAccessException 中。

现在,如果我想将此异常传播到我的 UI 层,一种方法是在服务层捕获此运行时异常并将此异常包装到我的自定义异常中,然后传播它。但我不想捕捉这个运行时异常。有什么方法可以覆盖 Spring JPA 的异常转换器行为并将所有 SQL 异常包装到我的自定义检查异常中?如果我能够做到这一点,我认为这种方法会更好。

【问题讨论】:

  • 为什么不想捕获 DataAccessException?
  • 是的..我可以这样做..但我将它作为最后的选择..缓存任何运行时异常..
  • 捕获DataAccessException 不会捕获其他运行时异常。
  • 而不是覆盖默认行为,这是有原因的,在相关方法或服务层周围应用@AfterThrowing 方面怎么样?从建议中进行任何自定义异常处理。只是一个example

标签: java hibernate exception jpa-2.0 spring-data-jpa


【解决方案1】:

关于 TransactionSystemException 的问题:在退出 @Transactional 方法时抛出此异常,以表明事务已回滚。

如果你想可靠地捕获违反约束的行为,你需要围绕事务而不是在它内部进行。例如,通过在saveUser() 方法中使用程序化事务划分而不是@Transactional,或者在顶级方法中添加try-catch 子句。

或者你应该访问

JPA JPA

【讨论】:

    【解决方案2】:

    Spring JPA 将所有异常转换为 Spring 的 DataAccessException,在 DAO 层处理这些异常并没有什么坏处。 IMO,即使您可以覆盖 Spring JPA 的异常翻译行为,您为什么要这样做?因为没有与此相关的业务评估员。

    在下面的线程中进行了类似的讨论: Exception Handling Strategy with Spring/JPA/JSF

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2015-12-29
      • 2013-05-20
      • 1970-01-01
      • 2011-08-27
      • 2016-06-04
      相关资源
      最近更新 更多