2011-04-19 62 views
3

我正在开发一个使用MySQL Server 5.1,Spring 3.0.5和Hibernate 3.6的Web应用程序。我使用Springs交易管理。我是一个新手,所以如果我问一个容易回答的问题,请耐心等待。 :-)Spring与Hibernate和MySQL,全局和本地事务管理

1)我读了全球(xa)和本地交易。是否正确,全局事务是指在不同资源(如不同数据库)上执行数据操作的事务。而且本地事务只在一个资源(数据库)上执行数据操作。

2)是否有可能与Hibernate进行全局事务?在Spring参考文档中,我读到:“您也可以很容易地使用Hibernate本地事务,如下例所示:在这种情况下,您需要定义一个Hibernate LocalSessionFactoryBean,您的应用程序代码将用它来获取Hibernate Session实例“。这就是为什么我认为Hibernate事务可能总是本地的,我没有发现任何其他的事情。

3)为什么在Hibernate中可以使用MyISAM表?他们不支持交易,我认为Hibernate需要交易?我真的不明白这一点。起初我认为这是不可能的 - 但为什么可以用Hibernate创建MyISAM表并使用MyISAM方言?这个怎么用??? Hibernate是否需要事务或不做?我认为使用Hibernate需要使用InnoDB。

感谢您的回答! :-)

回答

8
  1. 是,JTA,在Java XA交易的API,使用two-phase commit protocol进行全球交易。如果您需要确保多个资源的事务一致性,JTA是Java中的适当工具。

  2. 休眠does work with JTA。由于两阶段提交的性质,通常使用更多的资源,并且数据库供应商和驱动程序之间的实施质量各不相同,所以只有在必要时才使用它,这比建立普通的香草资源本地交易要困难得多。 (例如,JTA有点类似于MS SQL Server,但是这个功能只能通过一组存储过程来实现,其他资源可能不支持所有的标准,例如不允许事务暂停和稍后恢复。如果你不需要它,可以省去一些麻烦。)

  3. 你可以使用MyISAM和Hibernate,但事务处理不起作用。 Hibernate会正常启动并提交事务,MyISAM存储引擎会默默地忽略这些事务,所以一切都会直接进入磁盘。使用默认的存储引擎InnoDB,除非你有理由不这样做。

+0

感谢您的回答! :-) – nano7 2011-05-11 18:40:40

相关问题