2011-04-19 111 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

相關問題