2

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

现在,根据来自存储库的当前场景,我们所有的 SQL 异常都被包装到运行时异常 DataAccessException 中。

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

4

2 回答 2

1

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

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

或者你应该访问

JPA JPA

于 2013-05-18T06:21:30.133 回答
0

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

以下线程中的类似讨论: Spring/JPA/JSF 的异常处理策略

于 2013-05-20T14:45:58.410 回答