2010-11-22 94 views
0

我有一個使用Propagation.Required註釋的服務方法。它執行三個單獨的操作。Autocommit和Spring聲明性事務

  1. 插入到表1從表Ž如果沒有記錄在表每個用戶1
  2. 插入/更新表1作爲編輯/附加
  3. 從表中刪除X記錄1

原諒我的無知,但不應該在一次交易中運行所有這些?從某種意義上講,如果第三個查詢運行到一個異常,不應該第一次回滾呢?這在我的情況下不會發生。休眠自動提交設置是否會以任何方式影響txn邊界?在我的情況下,自動提交設置爲true。我所要求的是,只有在所有這些表都成功的情況下,這些表纔會進行提交。

+1

我們沒有機會在沒有看到您的代碼和配置的情況下回答您。 – skaffman 2010-11-22 11:49:17

回答

0

是的,休眠connection.autocommit屬性設置將影響事務邊界。

如果將此參數設置爲true,Hibernate會將底層JDBC連接置於自動提交模式,這將自動覆蓋您在自己的數據庫事務中執行的每條語句。因此,例如,如果第三個查詢/語句失敗,則只有第三個查詢/語句會回滾。

要將三者作爲一個單元執行,您需要關閉自動提交併在單個事務的上下文中執行全部三個,聲明式或其他方式。

1

你可以嘗試添加一層比服務層更高的層,並從那裏開始事務。

0

你肯定不想自動提交。這可能會在每次操作之後進行。關閉自動提交,並在最後添加一個顯式提交。