代码之家  ›  专栏  ›  技术社区  ›  Manish

为什么我们需要将本机hibernate异常转换为spring dataaccessexceptio

  •  0
  • Manish  · 技术社区  · 6 年前

    我正在查看“存储库注释”,并提到它用于异常的翻译,以便对Spring DATAAccess异常进行Hibernate异常。此外,我们需要配置以下后置处理器

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

    所以我的问题是为什么需要这个异常的转换。我们不能直接处理本机异常吗?

    谢谢,

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mark Bramnik    6 年前

    我认为这样做是为了把责任一分为二。

    简而言之,dao是一个层,它封装了数据库的所有工作,服务层是放置业务逻辑的地方。

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

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

    所以,spring“建议”抛出更通用的“dataaccessexception”

    希望这能回答你的问题