【问题标题】: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 来管理我的事务。

【问题讨论】:

    标签: java spring jpa transactions


    【解决方案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 接口及其实现

      1. JtaTransactionManager -----> JTA
      2. DataSourceTransactionManager -----> JDBC
      3. JpaTransactionManager ------> JPA
      4. HibernateTransactionManager ------> Hibernate

      这取决于您使用的弹簧模块

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 2015-04-18
        • 2014-02-19
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 2019-10-26
        相关资源
        最近更新 更多