Oracle序列在hibernate应用程序中没有正确递增

时间:2018-05-15 14:33:25

标签: spring oracle hibernate

我要求应用程序与模式连接(Say A),模式A有权访问另一模式的表(Say B)。当我试图通过应用程序在Schema B中的集群环境中插入记录时,序列无法正常工作。它有一个按顺序定义的增量,但有时它会在第二次或第三次插入时产生高值,有时它会在第5次或第6次插入时产生较少的值。

但是当我改变序列并给出NO Cache选项然后工作正常。但是这个解决方案给了我开销问题。

1 个答案:

答案 0 :(得分:0)

这就是序列的工作原理。每次访问缓存序列时,会话将从序列中获取n个数字,并且可以随时使用它们,直到会话关闭。无法控制广告订单。

任何连接多个会话的系统都是这种情况(连接池,集群环境,连接到同一数据库的多个胖客户端)。

让我们假设以下顺序:

CREATE SEQUENCE test_seq
      INCREMENT BY 1
      START WITH 1
      NOMAXVALUE
      NOCYCLE
      CACHE 10;

会话1调用test_seq.nextval并接收数字1到10

会话2调用test.seq.nextval并接收数字11到20

会话1插入三条记录

会话2插入两条记录

会话1插入一条记录

生成的广告订单将为

1
2
3
11
12
4

如果您需要记录ID以匹配插入顺序,则可以使用自Oracle 12c以来的标识列 一般情况下,最好不要为主键列指定任何特殊含义,并且最好通过时间戳列跟踪插入顺序。