在 h2 数据库中创建序列

Create sequence in h2 database

我想在 h2 数据库中为以下实体创建一个序列

public class Label {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "label_sequence")
  @SequenceGenerator(name = "label_sequence", sequenceName = "label_sequence", allocationSize = 100)
  private Long id;

  private String name;

  private String value;
}

下面是我正在执行的sql命令

CREATE SEQUENCE label_sequence
  START WITH 1
  INCREMENT BY 1
  MINVALUE 1;

我收到以下错误:

Syntax error in SQL statement "CREATE SEQUENCE LABEL_SEQUENCE
  START WITH 1
  INCREMENT BY 1
  MINVALUE[*] 1 "; SQL statement:
CREATE SEQUENCE label_sequence
  START WITH 1
  INCREMENT BY 1
  MINVALUE 1 [42000-140]

下面的查询有效

CREATE SEQUENCE label_sequence
  START WITH 1
  INCREMENT BY 1;

但是由于我猜的分配大小,我得到的 ID 值小于 1。

如何确保 ID 值永远不会低于 1?

您使用的是非常旧版本的 H2 数据库,H2 1.2.140 是 10 年前发布的。您需要使用一些了解此语法的现代版本。

如果你真的需要使用这样的旧版本,只需删除 MINVALUE 子句,你的序列将生成值 1, 2, … 9223372036854775807,所以你在溢出之前有足够的时间。如果您愿意,可以向列添加 CHECK 约束以提高安全性。