使用Hibernate和MySQL,全局和本地的Spring事务管理

时间:2011-04-19 14:25:32

标签: mysql hibernate spring transactions myisam

我正致力于使用MySQL Server 5.1,Spring 3.0.5和Hibernate 3.6开发Web应用程序。我使用Springs Transaction Management。我是新手,所以如果我问一个容易回答的问题,请耐心等待。 : - )

1)我读到了有关全局(xa)和本地事务的信息。是否正确,全局事务是指在不同资源(如不同数据库)上执行数据操作的事务。并且本地事务仅在一个资源(数据库)上执行数据操作。?

2)是否可以使用Hibernate进行全局事务?在Spring Reference Documentation中我读到了这个:“你也可以轻松地使用Hibernate本地事务,如下面的例子所示。在这种情况下,你需要定义一个Hibernate LocalSessionFactoryBean,你的应用程序代码将使用它来获取Hibernate会话实例。“这就是为什么我认为Hibernate交易可能总是本地的,我没有找到任何关于它的东西。

3)为什么可以将MyISAM表与Hibernate一起使用?他们不支持交易,我认为Hibernate需要交易?我真的不明白这一点。起初我认为这是不可能的 - 但为什么可以用Hibernate创建MyISAM表并使用MyISAM方言呢?这是如何运作的??? Hibernate是否需要交易或不需要交易?我想使用Hibernate你需要使用InnoDB。

感谢您的回答! : - )

1 个答案:

答案 0 :(得分:8)

  1. 是的,JTA是Java中XA事务的API,它使用two-phase commit protocol来执行全局事务。如果您需要确保多个资源的事务一致性,JTA是Java中的正确工具。

  2. Hibernate does work with JTA。设置比普通的vanilla资源本地事务要困难得多,由于两阶段提交的性质,通常使用更多的资源,并且实现质量因数据库供应商和驱动程序而异,所以只有在必要时才使用它。 (例如,JTA有点类型与MS SQL Server一起使用,但此功能仅通过一组存储过程粘合。其他资源可能不支持所有标准,例如不允许事务暂停并稍后恢复。如果你不需要它,请省去麻烦。)

  3. 您可以将MyISAM与Hibernate一起使用,但事务不起作用。 Hibernate将正常启动和提交事务,MyISAM存储引擎将静默忽略,因此一切都将直接进入磁盘。使用默认存储引擎InnoDB,除非您有理由不这样做。