【问题标题】:What is "persistence exception translation" for @Repository beans什么是 @Repository bean 的“持久性异常翻译”
【发布时间】:2012-08-25 14:29:46
【问题描述】:

我正在阅读带有注释部分的 Spring,我遇到了 @Repositoryannotation
我读到@Repository bean 与@Component bean 的不同之处在于它们有资格进行持久性异常转换。

有人可以详细说明持久性异常翻译是什么意思吗?

【问题讨论】:

    标签: spring spring-annotations


    【解决方案1】:

    Persistence Exception Translation 是将低级持久性异常转换为高级 Spring 异常的过程。

    来自 SpringSource 网站:

    常见的数据访问异常。 Spring 可以包装你的异常 选择的 O/R 映射工具,将它们从专有 (可能已检查)公共运行时的异常 DataAccessException 层次结构。这使您可以处理大多数 持久性异常,这是不可恢复的,仅在 适当的层,没有烦人的样板捕获/抛出,和 异常声明。您仍然可以捕获和处理异常 您需要的任何地方。请记住 JDBC 异常(包括 DB 特定方言)也转换为相同的层次结构,意思是 您可以在一致的范围内使用 JDBC 执行一些操作 编程模型。

    这样做的主要好处之一是将异常转换为运行时异常,实际上您不需要将 throws 声明添加到方法签名中。

    http://static.springsource.org/spring/docs/2.5.x/reference/orm.html

    【讨论】:

    • 但为什么需要它?如果我使用 Spring 提供的模板说休眠模板,那么它不做同样的事情吗?
    • @anand HibernateTemplate 已被 Hibernate 4.0 弃用
    • 它在哪里说它是必需的?
    • 不休眠已经将专有(可能检查的)异常包装到公共异常层次结构中?
    【解决方案2】:

    无论您使用何种数据库类型或持久性方法/技术,它都提供一致的异常层次结构。

    无论您使用的是 Oracle 与 MySQL 还是 JPA 与 JDBC,对于相同类型的错误,您都会得到相同的异常。

    看看SQLErrorCodeSQLExceptionTranslatorsql-error-codes.xml

    sql-error-codes.xml 特别有趣,因为您可以看到所有各种特定于供应商的错误代码以及它们映射到的层次结构中的异常。

    【讨论】:

      【解决方案3】:

      Spring 异常翻译机制可以透明地应用于所有使用 @Repository 注释的 bean——通过在 Context 中定义一个异常翻译 bean 后处理器 bean

      【讨论】:

        猜你喜欢
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 2017-08-18
        • 1970-01-01
        • 2013-01-25
        • 2011-08-10
        相关资源
        最近更新 更多