我想在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?
3条答案
按热度按时间mwecs4sa1#
这应该是可行的:
lvjbypge2#
您正在使用一个非常旧的H2数据库版本,H2 1.2.140是10年前发布的。你需要使用一些知道这种语法的现代版本。
如果你真的需要使用这种过时的版本,只需删除
MINVALUE
子句,你的序列将生成值1,2,... 9223372036854775807,所以你有足够的时间在溢出之前。如果您愿意,可以向列添加CHECK
约束以提高安全性。xcitsw883#
您还必须将Mode=Oracle添加到属性文件中,以便Oracle与序列请求语法兼容。
参见https://stackoverflow.com/a/64799048