我在我的應用程序中使用了spring批處理。我有一個上傳過程,其中數據從excel文件加載到數據庫中。 excel有五個電子表格加載在五個不同的表格中。如果上傳成功則沒有問題。但是當上傳失敗時,在第三張表格中說,我正在回滾整個上傳。這會導致第一個表格中的序列跳過數字。我該如何解決這個問題。我的序列增加1並有nocache。如何查找序列的最後一個號碼
由於提前
我在我的應用程序中使用了spring批處理。我有一個上傳過程,其中數據從excel文件加載到數據庫中。 excel有五個電子表格加載在五個不同的表格中。如果上傳成功則沒有問題。但是當上傳失敗時,在第三張表格中說,我正在回滾整個上傳。這會導致第一個表格中的序列跳過數字。我該如何解決這個問題。我的序列增加1並有nocache。如何查找序列的最後一個號碼
由於提前
爲了解決這個問題,你極有可能不得不改變你的期望。序列通常在事務中使用時不會回滾。例如:
插入到表B現在回滾T1。 T2中PK值會發生什麼?他們應該重新編號嗎?如果某人(如Java程序)已經讀取PK值,該怎麼辦?
你可以看到,即使是很簡單的情況下,這是不可能的回滾序列。
有些數據庫有identity
列在DB服務器內部分配密鑰,但即使是這些,你將有缺口的概念。
如果你真的需要的PK中順暢無阻,你將不得不使用自己的序列(或在Java代碼中的計數器),並保持/復位這一個自己。
謝謝Aaron。我爲每個表使用不同的順序。在這種情況下,T2首先回滾,然後只有T1回滾。順便說一句,我已經寫了一個java代碼來重置序列,一旦上傳失敗。 –
當兩個進程一次將數據插入到同一個表中時,會發生同樣的問題。 –
我們在這裏談論Oracle序列嗎? –