hibernate 在h2数据库中创建序列

k2fxgqgv  于 2023-10-23  发布在  其他
关注(0)|答案(3)|浏览(190)

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

mwecs4sa

mwecs4sa1#

这应该是可行的:

CREATE SEQUENCE "MY_OWN_SEQ" 
MINVALUE 1 
MAXVALUE 999999999 
INCREMENT BY 1 
START WITH 202700 
NOCACHE 
NOCYCLE;
lvjbypge

lvjbypge2#

您正在使用一个非常旧的H2数据库版本,H2 1.2.140是10年前发布的。你需要使用一些知道这种语法的现代版本。
如果你真的需要使用这种过时的版本,只需删除MINVALUE子句,你的序列将生成值1,2,... 9223372036854775807,所以你有足够的时间在溢出之前。如果您愿意,可以向列添加CHECK约束以提高安全性。

xcitsw88

xcitsw883#

您还必须将Mode=Oracle添加到属性文件中,以便Oracle与序列请求语法兼容。
参见https://stackoverflow.com/a/64799048

相关问题