奇怪的DB2 JPA序列生成
问题描述:
我发现我的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。
答
创建序列时使用NO CACHE选项,并且不会有间隙。请注意性能会稍差。
答
我一般我会建议使用increment和allocationSize来允许预分配id。这将大大提高性能。不知道为什么你不想要漏洞,但如果这是真正的需求,那么除了增量外,还需要删除缓存选项。
答
DB2序列具有称为“ORDER/NO ORDER”的选项,默认值为“NO ORDER”。我想这是原因,但我没有时间来测试它。将在测试后发布。
我测试过了。 “订单”条款解决了我的问题。 – Bewang 2011-03-18 21:46:57