为什么我们需要将本机 Hibernate 异常转换为 Spring DataAccessExceptio

Why we need to translate Native Hibernate Exceptions to Spring DataAccessExceptio

我正在查看@Repository Annotation,有人提到它用于将 Exception So that Hibernate Exception 转换为 Spring DataAccessException。我们还需要配置以下后处理器

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

所以我的问题是为什么这个 Exception 的翻译是 required.Can我们不是直接处理本机异常吗?

谢谢,

我认为这样做是为了明确职责分离。

简而言之,DAO是封装所有与数据库的工作的层,Service层是放置业务逻辑的地方。

如果是这样,关于 Hibernate 或任何其他数据库相关工具的知识必须保留在 DAO 中,服务应该对此一无所知。 例如,如果您决定从 Hibernate 切换到 Jooq,或者更一般地说,决定将关系数据库更改为其他东西,也许是 NoSQL,服务层将保持不变,只有 DAO 实现会发生变化。

这种灵活性是一件很酷的事情,但是,当 DAO 抛出异常并到达服务层时,异常可能会破坏这种设计,因为如果服务必须捕获 Hibernate 特定的异常,则本质上与 Hibernate 耦合。

所以,Spring "suggest" 抛出更通用的 "DataAccessException"

希望这能回答您的问题