对于最新稳定版本,请使用Spring Framework 7.0.1spring-doc.cadn.net.cn

一般ORM集成考虑

本节重点介绍适用于所有ORM技术的相关考虑因素。 休眠部分提供了更多细节,也展示了这些功能, 具体语境下的配置。spring-doc.cadn.net.cn

Spring ORM 集成的主要目标是清晰的应用分层(包括任何数据) 访问和事务技术)以及应用对象的松散耦合——不 更多业务服务依赖数据访问或交易策略,不再如此 硬编码的资源查找,不再有难以替换的单例,不再有定制服务 登记处。目标是拥有一种简单且一致的方法来连接应用对象,保持 它们尽可能可重用且不依赖容器。所有个体 数据访问功能本身即可使用,但与 Spring 的集成良好 应用上下文概念,提供基于XML的配置和交叉引用 普通的 JavaBean 实例,无需支持 Spring 支持。在典型的春季应用中, 许多重要的对象是 JavaBeans:数据访问模板、数据访问对象, 事务管理器,使用数据访问对象和事务的业务服务 比如管理者、网页视图解析器、使用业务服务的网页控制器等等。spring-doc.cadn.net.cn

资源与事务管理

典型的业务应用充斥着重复的资源管理代码。 许多项目试图发明自己的解决方案,有时牺牲了正确的处理 为了编程方便而导致的失败。Spring倡导简单的解决方案 资源处理,即通过JDBC模板和应用AOP进行的IoC。 用于ORM技术的拦截器。spring-doc.cadn.net.cn

基础设施提供适当的资源处理和适当的转换 未检查基础设施异常层级结构中的特定API例外。Spring 引入了适用于任何数据访问策略的DAO异常层级。对于直接 JDBC,那个Jdbc模板前文提到的类提供了连接处理和正确转换SQLException前往DataAccessException层级结构,包括数据库特定SQL错误的翻译 代码指向有意义的例外类。关于 ORM 技术,请参见下一节了解如何获得相同的异常 翻译带来的好处。spring-doc.cadn.net.cn

在交易管理方面,Jdbc模板班级挂钩到春季 支持交易,并通过各自的 JTA 和 JDBC 交易 春季事务管理器。对于支持的 ORM 技术,Spring 提供了 Hibernate 以及通过Hibernate和JPA事务管理器以及JTA支持的JPA支持。 有关事务支持的详细信息,请参见事务管理章节。spring-doc.cadn.net.cn

例外翻译

当你在DAO中使用Hibernate或JPA时,必须决定如何处理持久化 技术的原生例外类。DAO抛出了一个子类休眠例外PersistenceException,取决于技术。这些例外都是运行时的 例外情况,无需声明或发现。你可能还得处理IllegalArgumentException非法州例外.这意味着来电者只能 除非例外想依赖持久性,否则通常会把例外视为致命的 技术本身的例外结构。捕捉具体原因(例如乐观因素) 锁定失败)在不将调用方绑定于实施策略的情况下是不可能实现的。 这种权衡对于高度基于 ORM 的应用来说可能是可以接受的 不需要任何特殊例外处理(或两者兼有)。然而,Spring允许例外 翻译应透明地通过@Repository注解。如下 示例(一个用于 Java 配置,一个用于 XML 配置)展示了如何实现:spring-doc.cadn.net.cn

@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>

后处理器自动查找所有异常转换器(的实现) 这PersistenceExceptionTranslator接口)并建议所有标记为@Repository注释以便发现的译者能够截取并应用 对抛出的例外进行适当的翻译。spring-doc.cadn.net.cn

总之,你可以基于纯持久化技术的 API 实现 DAO,并且 注释的同时仍能受益于 Spring 管理的事务,依赖性 注入,以及透明异常转换(如有需要)到 Spring 的自定义 例外层级。spring-doc.cadn.net.cn