【发布时间】:2012-08-25 14:29:46
【问题描述】:
我正在阅读带有注释部分的 Spring,我遇到了 @Repositoryannotation
我读到@Repository bean 与@Component bean 的不同之处在于它们有资格进行持久性异常转换。
有人可以详细说明持久性异常翻译是什么意思吗?
【问题讨论】:
我正在阅读带有注释部分的 Spring,我遇到了 @Repositoryannotation
我读到@Repository bean 与@Component bean 的不同之处在于它们有资格进行持久性异常转换。
有人可以详细说明持久性异常翻译是什么意思吗?
【问题讨论】:
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
【讨论】:
无论您使用何种数据库类型或持久性方法/技术,它都提供一致的异常层次结构。
无论您使用的是 Oracle 与 MySQL 还是 JPA 与 JDBC,对于相同类型的错误,您都会得到相同的异常。
看看SQLErrorCodeSQLExceptionTranslator 和sql-error-codes.xml。
sql-error-codes.xml 特别有趣,因为您可以看到所有各种特定于供应商的错误代码以及它们映射到的层次结构中的异常。
【讨论】:
Spring 异常翻译机制可以透明地应用于所有使用 @Repository 注释的 bean——通过在 Context 中定义一个异常翻译 bean 后处理器 bean
【讨论】: