什么是@Repository bean的"持久性异常转换"

Ana*_*and 20 spring spring-annotations

我正在阅读带有注释部分的Spring,并且我发现了一个@Repository注释,
我读到@Repository豆类与bean有所不同,@Component因为它们有资格进行持久性异常转换.

有人可以详细说明持久性异常翻译的含义吗?

Kev*_*sox 13

持久性异常转换是将低级持久性异常转换为高级Spring异常的过程.

来自SpringSource网站:

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

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

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

  • hibernate是否已将专有(可能已检查)的异常包装到公共异常层次结构中? (3认同)

dus*_*ltz 5

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

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

查看SQLErrorCodeSQLExceptionTranslatorsql-error-codes.xml

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