2013-05-08 57 views
3

我不知道这种方法是否最好。但我有一个需要处理Spring JPA存储库(DAO层)异常的地方。处理在某种意义上可能会传播给用户界面,或者可能会在服务层上做一些逻辑。如何覆盖默认的Spring JPA异常转换器行为?

现在根据来自以上仓库的现有方案,我们所有的SQL异常都被包装到运行时异常DataAccessException中。

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

+0

为什么你不想要赶上DataAccessException的? – 2013-05-12 02:28:05

+0

你..我可以做到这一点..但我保持它作为最后一个选项..这是缓存任何运行时异常。 – dhroove 2013-05-13 01:44:48

+3

捕捉'DataAccessException'不捕获其他运行时异常。 – 2013-05-13 01:46:23

回答

1

春天JPA将所有的异常到Spring的DataAccessException,有在你的DAO层处理这些异常没有坏处。国际海事组织,即使你可以重写春季JPA的例外翻译行为,你为什么要这样做?因为没有与之相关的商业价值。

以下螺纹similiar讨论: Exception Handling Strategy with Spring/JPA/JSF

1

问题有关TransactionSystemException:为了表明交易已被回滚退出@Transactional方法此异常被抛出。

如果您想要可靠地捕捉约束违规,则需要围绕事务进行处理,而不是在事务处理中进行处理。例如,通过在saveUser()方法内使用编程事务划分而不是@Transactional,或者通过向顶级方法添加try-catch子句。

,或者你应该访问

JPA JPA