我在我的Web應用程序中使用Spring,底層數據庫爲Sybase。與Sybase的Spring交易
我有3個複雜的存儲過程被執行。 的特效,有創建表和DROP TABLE命令舉行的臨時結果集。
這些表在用戶分貝空間中創建的,而其在tempdb空間。因此,我面臨着需要確保從服務bean(將有DAO對象調用存儲過程)的整個服務操作序列化。是否簡單地使服務bean方法成爲一個Spring Transaction,確保在我的情況下解決潛在的併發相關問題?
,我注意到的是,我的註解服務方法@Transactional,取得了Sybase數據庫拋出一個錯誤另一件事:「CREATE TABLE命令不能在事務內執行。」這是否意味着Spring使整個數據庫操作成爲事務? 我真的不清楚這一點,任何解釋都會受到歡迎。 含義如果我有一個名爲myproc的存儲過程。 sybase語句將爲exec myproc。這就是說,由服務方法中的DAO對象執行,註釋爲@Transactional。現在,春天在什麼使數據庫操作「的begin tran 高管在myproc 結束TRAN」。我的觀察似乎表明這一點。請解釋。
而且也解釋了,如果@Transactional的只是註釋,能解決我的併發問題。我實際上不希望我的存儲過程的兩個實例一次在數據庫上運行。
創建的表的名稱是否以#符號開頭?這些名稱是固定的,還是以某種方式按照每個請求生成的? – 2009-11-01 22:50:42
這些表不加前綴#,即表在用戶數據庫空間中創建,而不是在tempdb空間中創建。名稱是固定的,儘管表模式是根據請求動態生成的。 – 2009-11-02 15:59:52
DDL(如創建和刪除表語句)通常會執行隱式提交,因此您不能將其作爲事務性語句的一部分,因此不會出現此錯誤。 – 2009-11-16 01:20:45