2011-02-15 91 views
1

我發現我的JPA項目中使用eclipselink,spring和db的序列不是連續生成的。 JPA似乎檢索下一個緩存的序列號,即使當前的序列號沒有運行。奇怪的DB2 JPA序列生成

我的順序是由本聲明

create or replace sequence MYSCHEMA.SEQ_MY_ID 
as integer 
    start with 1 increment by 1; 

和序列緩存中創建爲20

我的應用程序將需要添加my_id列每次運行兩個序列號。我希望是這樣的順序:

RUN #1 
1 
2 
RUN #2 
3 
4 

但實際上,這樣生成的序列號:

RUN #1 
1 
21 
RUN #2 
2 
3 
RUN #3 
22 
41 

有同時請求序列運行兩個線程。但是即使在多線程環境下,序列也應該連續生成。爲什麼使用下一個緩存值?我怎麼弄清楚是什麼罪魁禍首? DB2,JPA或Spring。

回答

1

創建序列時使用NO CACHE選項,並且不會有間隙。請注意性能會稍差。

1

我一般我會建議使用increment和allocationSize來允許預分配id。這將大大提高性能。不知道爲什麼你不想要漏洞,但如果這是真正的需求,那麼除了增量外,還需要刪除緩存選項。

0

DB2序列具有稱爲「ORDER/NO ORDER」的選項,默認值爲「NO ORDER」。我想這是原因,但我沒有時間來測試它。將在測試後發佈。

+0

我測試過了。 「訂單」條款解決了我的問題。 – Bewang 2011-03-18 21:46:57