2013-07-15 58 views
1

我在我的應用程序中使用了spring批處理。我有一個上傳過程,其中數據從excel文件加載到數據庫中。 excel有五個電子表格加載在五個不同的表格中。如果上傳成功則沒有問題。但是當上傳失敗時,在第三張表格中說,我正在回滾整個上傳。這會導致第一個表格中的序列跳過數字。我該如何解決這個問題。我的序列增加1並有nocache。如何查找序列的最後一個號碼

由於提前

+0

我們在這裏談論Oracle序列嗎? –

回答

0

爲了解決這個問題,你極有可能不得不改變你的期望。序列通常在事務中使用時不會回滾。例如:

  1. T1插入到表A,使用序列S生成PK值
  2. T2使用序列S生成PK值

插入到表B現在回滾T1。 T2中PK值會發生什麼?他們應該重新編號嗎?如果某人(如Java程序)已經讀取PK值,該怎麼辦?

你可以看到,即使是很簡單的情況下,這是不可能的回滾序列。

有些數據庫有identity列在DB服務器內部分配密鑰,但即使是這些,你將有缺口的概念。

如果你真的需要的PK中順暢無阻,你將不得不使用自己的序列(或在Java代碼中的計數器),並保持/復位這一個自己。

+0

謝謝Aaron。我爲每個表使用不同的順序。在這種情況下,T2首先回滾,然後只有T1回滾。順便說一句,我已經寫了一個java代碼來重置序列,一旦上傳失敗。 –

+0

當兩個進程一次將數據插入到同一個表中時,會發生同樣的問題。 –

相關問題