Java Hibernate忽略序列生成器的初始值
我需要在数据库中的所有表中都有一个唯一的ID,该ID以偏移量开始,比如说1000。偏移量下面的ID是为Java代码中常量引用的特殊记录保留的。换句话说,保存在任何表中的第一条记录的ID为1000,下一条记录的ID为1001,以此类推 我遵循了Hibernate文档和各种帖子中的说明,下面是我使用的注释:Java Hibernate忽略序列生成器的初始值,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我需要在数据库中的所有表中都有一个唯一的ID,该ID以偏移量开始,比如说1000。偏移量下面的ID是为Java代码中常量引用的特殊记录保留的。换句话说,保存在任何表中的第一条记录的ID为1000,下一条记录的ID为1001,以此类推 我遵循了Hibernate文档和各种帖子中的说明,下面是我使用的注释: @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @SequenceGenerator(name = "my_sequence",
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "my_sequence", initialValue = 1000, allocationSize = 10)
private long id;
不幸的是,Hibernate完全忽略了initialValue设置。它生成以下SQL代码:
create table hibernate_sequence (next_val bigint)
insert into hibernate_sequence values ( 1 )
我还尝试了一种同样不起作用的桌面策略。ID以1开头
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@TableGenerator(name = "my_sequence", initialValue = 1000, allocationSize = 10)
private long id;
顺便说一句,EclipseLink JPA提供商确实可以这样做。我的Hibernate版本是5.2.7,我正在使用JPAAPI。我正在使用MySQL
有人遇到过这个问题吗
提前感谢。我认为您在这两种策略上都忽略了一些特性: 序列
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "my_sequence", sequenceName= "dbsequence"
initialValue = 1000, allocationSize = 10)
private long id;
表格
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "my_sequence", sequenceName= "dbsequence"
initialValue = 1000, allocationSize = 10)
private long id;
Id生成表应该有两列。第一列是用于标识特定生成器序列的字符串类型。它是表中所有生成器的主键。第二列是一个整数类型,它存储正在生成的实际id序列。此列中存储的值是序列中分配的最后一个标识符
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@TableGenerator(name = "my_sequence"
, table = "id_gen"
, pkColumnName = "gen_name"
, valueColumnName = "gen_val"
, initialValue = 1000, allocationSize = 10)
private long id;
表策略显然更便携,所以考虑当你做出选择时,
生成器名称必须包含在@派生值注释中,如:@GeneratedValue(strategy = GenerationType.TABLE, generator = "my_sequence")
@TableGenerator(
name = "my_sequence",
table = "id_gen",
pkColumnName = "gen_name",
valueColumnName = "gen_val",
initialValue = 1000,
allocationSize = 10)
这不会改变任何事情。Hibernate一直忽略注释参数,例如表名或初始值:“创建表Hibernate\u序列”。这些参数毕竟是可选的。