【问题标题】:Create sequence in h2 database在 h2 数据库中创建序列
【发布时间】:2020-08-23 15:18:37
【问题描述】:

我想在 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?

【问题讨论】:

    标签: sql hibernate h2


    【解决方案1】:

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

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

    【讨论】:

    • 使用最新版本时,解决了最小值问题。但我仍然收到负 ID 值。
    • 这意味着您的应用程序将负值传递给 H2 并且实际上并未使用序列。
    猜你喜欢
    • 2014-08-13
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2019-01-14
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多