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

Sam*_*Sam 7 hibernate jpa

我对主键使用了以下 id 生成策略。

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

我想对非主键列做同样的事情。[a] 为这样的密钥定义自动生成方案的语义是什么 [b] 是否可以保证生成的数字不会出现数字差距。

Jam*_*hon 7

如果您删除@Id注释并保留其余部分(当然更改字段名称),那么应该可以工作。

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "columnName", unique = true, nullable = false, insertable = false, updatable = false)
    private Integer columnName;
Run Code Online (Sandbox Code Playgroud)

通过允许数据库生成列值,您将确保没有间隙,删除和回滚的情况除外。

例如,如果您删除表中间的行,则会产生一个无法填充的间隙。

  • 我很好奇:我可以在主键以外的某些属性中使用 @GenerateValue(SEQUENCE) 吗?并且将生成它的值??? (2认同)