使用啥事务管理器? (JPA,春季)
Posted
技术标签:
【中文标题】使用啥事务管理器? (JPA,春季)【英文标题】:What transaction manager to use? (JPA, Spring)使用什么事务管理器? (JPA,春季) 【发布时间】:2011-04-22 06:54:39 【问题描述】:我正在开发一个基于 JPA + Hibernate、Spring 和 Wicket 的 Web 应用程序。我想知道在我的代码中实现事务的最佳方式是什么?我应该使用什么事务管理器?应该是org.springframework.orm.jpa.JpaTransactionManager
,还是org.springframework.jdbc.datasource.DataSourceTransactionManager
,还是别的什么?我想使用 Spring 来管理我的事务。
【问题讨论】:
【参考方案1】:org.springframework.orm.jpa.JpaTransactionManager
我的偏好是将此与注释一起使用:
<tx:annotation-driven transaction-manager="myTxManager" />
【讨论】:
【参考方案2】:nanda is right,你只能使用 JpaTransactionManager。我们这里说的事务管理器抽象是 Spring 的 PlatformTransactionManager 接口,而JPATransactionManager 是该接口的唯一实现理解 JPA。
您应该阅读 Spring 参考中的 Transaction Management 章节以更好地理解这个主题。
【讨论】:
+1 表示完整性,+1 表示 nanda 也是公平的 :) @SeanPatrickFloyd 如果我们只能使用 JpaTransactionManager 那么为什么 Spring 中存在这么多其他 transacitonManager 以及何时应该使用它们? @Erlan 每个持久性类型都有一个事务管理器实现:jdbc、hibernate、jpa、jdo 嗯。现在我明白了。谢谢 为什么不同的持久化类型(jdbc,hibernate,jpa...)依赖同一个接口PlatformTransactionManager
,却只能通过特定的实现?【参考方案3】:
org.springframework.transaction.PlatformTransactionManager 接口是 Spring API 中的关键抽象,它提供了在运行时控制事务操作的基本方法:开始、提交和回滚。
PlatformTransactionManager 接口及其实现
-
JtaTransactionManager -----> JTA
DataSourceTransactionManager -----> JDBC
JpaTransactionManager ------> JPA
HibernateTransactionManager ------> Hibernate
这取决于您使用的弹簧模块
【讨论】:
以上是关于使用啥事务管理器? (JPA,春季)的主要内容,如果未能解决你的问题,请参考以下文章
JPA 是规范 Eclipselink and hibernate its implementation 它与 Spring 事务管理有啥关系?