db2 get 序列值与值 get through application 不同

db2 get sequence value different with value get through application

提问人:Panadol Chong 提问时间:2/8/2021 最后编辑:James ZPanadol Chong 更新时间:2/8/2021 访问量:302

问:

我在我的应用程序和 db2 中发现了一个奇怪的事件。

我创建了一个序列,如下所示:

CREATE OR REPLACE SEQUENCE MY.CSAUDITTRAIL_SEQ AS BIGINT START WITH 1 INCREMENT BY 10 NO MAXVALUE CYCLE ORDER;

我有一张表格如下:

CREATE TABLE MY.CHANNELSERVICEAUDITTRAIL ( 
  "CSAUDITID" BIGINT NOT NULL , 
  "LOGINID" BIGINT , 
  "CREATED" TIMESTAMP , CONSTRAINT "CHANNELSERVICEAUDITTRAIL_PK" PRIMARY KEY ( "CSAUDITID" ) 
);

在我的 CHANNELSERVICEAUDITTRAIL 实体类中,我有如下内容:

@Entity
@Table(schema = "MY")
@SequenceGenerator(name = "CSAUDITTRAIL_SEQ", initialValue = 1, allocationSize = 500, sequenceName = "MY.CSAUDITTRAIL_SEQ", schema = "MY")
public class ChannelServiceAuditTrail {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CSAUDITTRAIL_SEQ")
    private long csAuditId;

我用来在我的层中进行持久化和刷新:org.hibernate.jpa.spi.AbstractEntityManagerImplDataAccessBean

@Override
public T persistAndFlush(T entity) {
    getEm().persist(entityClass.cast(entity));
    getEm().flush();
    return entity;
}

据我了解,每次我坚持并刷新我的实体时,该值都会从CSAUDITTRAIL_SEQ获得,并且每次增加 10。ChannelServiceAuditTrailcsAuditId

但是输出和我看到的不一样,当我使用下面的查询来获取序列值时,每次该值都会增加 10,例如当前值为 19881

select next value for tibs.CSAUDITTRAIL_SEQ from SYSIBM.SYSDUMMY1;

但是,在我的应用程序中,当我调试或将日志放在 下时,我发现值不同,不是 19881,而是它的 19302,并且每次增加 1。getEm().persist(entityClass.cast(entity));

我想知道这怎么会发生,这是我错过了 db2 序列的一些规则吗?

Java 休眠 DB2 序列 增量

评论

1赞 mao 2/8/2021
当基础序列具有“INCREMENT BY 10”时,为什么有“allocationSize = 500”?
0赞 mshabou 2/11/2021
请阅读这篇文章: xspdf.com/resolution/52096666.html

答: 暂无答案