Spring中的JtaTransactionManager
和HibernateTransactionManager
有什么区别?在我的应用程序中何时使用其中之一?我知道如果我使用Hibernate作为ORM工具,我可以使用HibernateTransactionManager
,但我不明白何时使用JtaTransactionManager
。
Spring中的JtaTransactionManager
和HibernateTransactionManager
有什么区别?在我的应用程序中何时使用其中之一?我知道如果我使用Hibernate作为ORM工具,我可以使用HibernateTransactionManager
,但我不明白何时使用JtaTransactionManager
。
HibernateTransactionManager
用于在单个 Hibernate SessionFactory
的基础上管理事务。 如果您的应用程序仅使用符合 JDBC 标准的数据库存储数据(即,不涉及 ERP、JMS 队列、文件系统等),并使用 Hibernate 访问这些数据,则可以在应用程序中使用 HibernateTransactionManager
。
但是,如果您有能够同时修改多个数据存储区并且需要确保所有存储区的数据一致性的业务操作,则需要使用 JTA 事务。 JTA 支持由 JavaEE 容器(如 JBoss、WebLogic 或 WebSphere)或第三方 JTA 提供商(如 Atomikos 或 Bitronix)提供。JtaTransactionManager
使您能够将 JTA 提供商集成到 Spring 应用程序中。JtaTransactionManager
仅促进了 JTA 事务提供商的集成,而本身并不是一个事务提供商。 您希望参与事务的底层数据源也应支持 JTA 事务,这通常在驱动程序层实现。例如,大多数 JDBC 驱动程序都有 JTA 和非 JTA 实现。