如何覆盖默认的Spring JPA异常翻译行为?

时间:2013-05-08 07:18:55

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

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

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

现在有一种方法,如果我想将此异常传播到我的UI层,而不是在服务层上捕获此运行时异常并将此异常包装到我的自定义异常中,然后传播它。但我不想捕获此运行时异常。有没有办法覆盖Spring JPA的Exception转换器行为并使其将所有SQL异常包装到我的Custom Checked异常中?如果我能够做到这一点,我认为这种方法更好。

2 个答案:

答案 0 :(得分:1)

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

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

或者你应该访问

JPA JPA

答案 1 :(得分:0)

Spring JPA将所有异常转换为Spring的DataAccessException,在DAO层中处理这些异常没有任何害处。 IMO,即使你可以覆盖Spring JPA的异常翻译行为,你为什么要这样做呢?因为没有与之相关的商业价值。

以下主题中的类似讨论: Exception Handling Strategy with Spring/JPA/JSF