我正在使用Spring Framework 3和Hibernate 3.6開發Web應用程序,並試圖理解事務管理是如何工作的。 我使用mySQL Server 5.1和InnoDB表。我編寫了基於純Hibernate 3 API的DAO。使用Spring,Hibernate和mySQL進行事務管理
1)這是正確的,mySQL服務器本身指定如何處理事務?這意味着它決定何時需要鎖定記錄?
2)當我聲明在彈簧的方法如@Transactional(readOnly的= TRUE)或@Transactional(唯讀= FALSE)這是否影響如果datarecords在事務期間鎖定?這意味着,當readOnly = true時,沒有datarecord被鎖定,當readOnly = false時,所有使用的datarecords都被鎖定了?
3)當我讀取readOnly = true並且讀取各種數據記錄時會發生什麼。讓我們假設在閱讀過程中他們被另一個交易所改變,以便我得到一些舊的記錄和一些新的記錄。那可能嗎?
4)什麼時候發生提交?成功交易後或會話結束後?
5)何時啓動hibernate會話?每個會話(服務器和客戶端之間)還是每個事務?
6)到底誰負責交易管理?春天或MySQL或兩者?
感謝您的回答! :-)
謝謝! :-)所以鎖定記錄是mySQL的責任,讀取datarecords不會導致鎖定?即使「只讀」與交易沒有任何關係,這意味着在此交易過程中數據記錄不會被鎖定,因爲閱讀不會導致鎖定? – nano7 2011-04-13 14:28:02
@ nano7:鎖定等實現細節取決於數據庫引擎,我不確定InnoDB如何處理它。 – axtavt 2011-04-13 14:31:36
好的,謝謝! :-) – nano7 2011-04-13 14:32:21