使用啥事务管理器? (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 2.0 中的会话和事务有啥区别?

JPA 是规范 Eclipselink and hibernate its implementation 它与 Spring 事务管理有啥关系?

Spring JPA - 找不到实体管理器工厂,为啥?

在 Hibernate 的 EmptyInterceptor 中注入 JPA 的实体管理器

将分离的实体合并到 JPA 中的实体管理器的最佳方法是啥