hibernate – 非主键列的自动递增数字生成

我已经为主键使用了以下id生成策略.

    @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "id", unique = true, nullable = false, insertable = false, updatable = false)
        private Integer id;

我想对非主键列执行相同操作.
        [a]为这样的密钥定义自动生成方案的语义是什么
        [b]是否保证生成的数字不会有数字缺口.

最佳答案 通常,确保自动递增的值始终增加,但可能存在间隙.

如果两个插入同时发生,并且例如回滚一个事务,则会发生间隙(如果数据库确保没有间隙,则需要序列化所有事务.)

编辑

this page获取的oracle示例:

CREATE SEQUENCE supplier_seq
    MINVALUE 1
    START WITH 1
    INCREMENT BY 1
    CACHE 20;

对于序列,cache选项指定将在内存中存储多少个序列值以便更快地访问.

使用缓存创建序列的缺点是,如果发生系统故障,所有未使用的缓存序列值将“丢失”.这导致分配的序列值中的“间隙”.当系统重新启动时,Oracle将从序列中停止的位置缓存新数字,忽略所谓的“丢失”序列值.

点赞