我有一个具有以下架构和序列的现有数据库:
CREATE TABLE public.my_table
(
id bigint NOT NULL,
...
CONSTRAINT travelit_hotels_pkey PRIMARY KEY (id)
);
CREATE SEQUENCE public.my_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 500791
CACHE 1;
我的@Entity
映射利用序列:
@Id
@GeneratedValue(generator = "my_seq")
@SequenceGenerator(name = "my_seq", sequenceName = "my_seq")
private Long id;
截至hibernate-5
,我正在使用以下属性:
hibernate.id.new_generator_mappings=true
结果:当我创建一个新实体时,它会分配以下 ID:500744
.
这是<序列的开始,并且已经存在于我的postgres
中数据库!
为什么?
最佳答案
当使用hibernate.id.new_generator_mappings = true
时,hibernate默认会创建一个INCRMENT 50
的序列。
如上所述here ,生成的 id 将是 SEQ-49
。这会与使用 hibernate < 5 生成的现有数据库产生冲突。
解决方案:将现有序列生成器的 allocationSize
限制为 1:
@SequenceGenerator(..,allocationSize = 1)
关于java - 如何在 hibernate-5 中使用自定义表顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38848158/