2011-02-15 88 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