我创建了一个Oracle序列:
创建序列seq_acteurs以1加1开始;
通常,序列必须递增1,但是当插入Acteurs
表时,序列s
递增50!这似乎不符合逻辑。为什么会这样?
任何帮助都会有很大帮助。
答案 0 :(得分:3)
序列不保证它们生成无间隙的数字序列。
您可以通过指定nocache
来最小化间隙,但这仍然不能保证无间隙序列,并且可能会造成资源争用。
documentation的示例:
创建SEQUENCE customers_seq 开始1000 增加1 NOCACHE NOCYCLE;
答案 1 :(得分:3)
在您需要时,不会一次提取一个序列号。最重要的是,DB在内存中缓存了一定数量的序列号。当缓存的序列全部用完时,DB会将一个新的序列号块提取到缓存中。现在如果数据库由于某种原因崩溃而缓存仍然有一些未使用的数字,那么你的序列号可能会有一些空白。
答案 2 :(得分:0)
在您的实体类中添加此内容并将增加1
allocationSize=1
这是一个例子:
@SequenceGenerator(name = "ECP_EVALUACION_SEQ", sequenceName = "SCORTN.ECP_EVALUACION_SEQ",allocationSize=1)