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

nan*_*no7 3 mysql spring myisam hibernate transactions

我正致力于使用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 Session实例. " 这就是为什么我认为Hibernate事务可能总是本地的,我没有找到任何关于它的东西.

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

谢谢回答!:-)

Hen*_*ing 8

  1. 是的,JTA是Java中XA事务的API,它使用两阶段提交协议来执行全局事务.如果需要确保多个资源的事务一致性,JTA是Java中的正确工具.

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

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