【问题标题】:Why we need to translate Native Hibernate Exceptions to Spring DataAccessExceptio为什么我们需要将 Native Hibernate Exceptions 转换为 Spring DataAccessExceptio
【发布时间】:2018-06-24 07:04:11
【问题描述】:

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

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

所以我的问题是为什么需要这种 Exception 的翻译。我们不能直接处理 Native Exception 吗?

谢谢,

【问题讨论】:

  • 这不是必需的。但是,无论您的数据访问层使用 Hibernate、EclipseLink、JDBC 还是任何其他持久性 API,都能以相同的方式处理异常是一件好事。

标签: java spring exception translation dao


【解决方案1】:

我认为这样做是为了清楚地分离职责。

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

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

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

因此,Spring“建议”抛出更通用的“DataAccessException”

希望这能回答你的问题

【讨论】:

  • 谢谢 Mark,现在我对 Repository Annotation 的使用很清楚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 2017-02-26
  • 2011-04-03
相关资源
最近更新 更多