本部分重点介绍适用于所有 ORM 技术的注意事项。 Hibernate 部分提供了更多详细信息,并展示了这些功能和 具体上下文中的配置。Spring中文文档

Spring 的 ORM 集成的主要目标是清晰的应用程序分层(使用任何数据 访问和事务技术)和应用程序对象的松散耦合 — 否 更多的业务服务依赖于数据访问或事务策略,不再 硬编码资源查找,不再有难以替换的单例,不再有自定义服务 登记处。目标是采用一种简单且一致的方法来连接应用程序对象,将 它们尽可能可重用且不受容器依赖。所有个人 数据访问功能可以单独使用,但可以与 Spring 很好地集成 应用程序上下文概念,提供基于 XML 的配置和 不需要 Spring 感知的普通 JavaBean 实例。在典型的 Spring 应用程序中, JavaBeans 的许多重要对象:数据访问模板、数据访问对象、 事务管理器、使用数据访问对象和事务的业务服务 管理器、Web 视图解析程序、使用业务服务的 Web 控制器等。Spring中文文档

资源和事务管理

典型的业务应用程序充斥着重复的资源管理代码。 许多项目试图发明自己的解决方案,有时会牺牲适当的处理 为方便编程而失败。Spring 提倡简单的解决方案,以适当的方式 资源处理,即在JDBC的情况下通过模板化和应用AOP的IoC ORM技术的拦截器。Spring中文文档

基础结构提供适当的资源处理和适当的转换 未经检查的基础结构例外层次结构的特定 API 例外。Spring 引入了适用于任何数据访问策略的 DAO 异常层次结构。对于直接 JDBC,上一节中提到的类提供连接处理和到层次结构的正确转换,包括特定于数据库的 SQL 错误的转换 代码到有意义的异常类。对于 ORM 技术,请参阅下一节,了解如何获取相同的异常 翻译的好处。JdbcTemplateSQLExceptionDataAccessExceptionSpring中文文档

在事务管理方面,该类与 Spring 挂钩 事务支持,并支持 JTA 和 JDBC 事务,通过各自 Spring 事务管理器。对于支持的 ORM 技术,Spring 提供了 Hibernate 以及通过 Hibernate 和 JPA 事务管理器提供的 JPA 支持以及 JTA 支持。 有关事务支持的详细信息,请参阅事务管理一章。JdbcTemplateSpring中文文档

异常翻译

在 DAO 中使用 Hibernate 或 JPA 时,必须决定如何处理持久性 技术的本机异常类。DAO 抛出 或 的子类,具体取决于技术。这些异常都是运行时 例外情况,不必声明或捕获。您可能还需要处理 和 .这意味着呼叫者只能 将异常视为通常致命的,除非它们希望依赖于持久性 技术自身的异常结构。捕捉特定原因(例如乐观 锁定失败)如果不将调用方与实现策略联系起来,则是不可能的。 这种权衡对于强基于 ORM 或 不需要任何特殊的例外处理(或两者兼而有之)。但是,Spring 允许例外 通过注释透明地应用翻译。以下 示例(一个用于 Java 配置,一个用于 XML 配置)展示了如何执行此操作:HibernateExceptionPersistenceExceptionIllegalArgumentExceptionIllegalStateException@RepositorySpring中文文档

@Repository
public class ProductDaoImpl implements ProductDao {

	// class body here...

}
@Repository
class ProductDaoImpl : ProductDao {

	// class body here...

}
<beans>

	<!-- Exception translation bean post processor -->
	<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

	<bean id="myProductDao" class="product.ProductDaoImpl"/>

</beans>

后处理器会自动查找所有异常转换器(实现 接口),并建议所有标有注解的 Bean,以便发现的翻译人员可以拦截并应用 对抛出的异常进行适当的翻译。PersistenceExceptionTranslator@RepositorySpring中文文档

综上所述,您可以基于普通持久化技术的 API 和 注解,同时仍然受益于 Spring 管理的事务、依赖关系 注入,以及透明异常转换(如果需要)到 Spring 的自定义 异常层次结构。Spring中文文档