【发布时间】:2021-12-05 13:04:31
【问题描述】:
原来 Hibernate 插入了 ID 从 50 开始的新值。但重新部署后,新 ID 为 50050、50051 等。
为什么会这样?如何将其配置为始终递增 1?
数据库是甲骨文。
序列的 SQL:
create sequence my_seq increment by 1 cache 1000;
列设置:
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGeneratorMySeq")
@SequenceGenerator(name = "seqGeneratorMySeq", sequenceName = "MY_SEQ")
private Long id;
【问题讨论】:
-
你应该检查数据库中序列的
curval。我认为这里的休眠无关。如果您正在重新部署,您是从头开始重新创建序列吗? -
如果您缓存 1000 并重新启动,您可能无法将下一个序列设为 +1。不能保证下一个序列将是前一个序列的 +1。您可以将缓存设置为 1,但这并不高效。
-
检查
hibernate.id.new_generator_mappings的设置是否为true。另见here 对cache大小的评论 -
@MarmiteBomber 但我认为当第一个值为真时我遇到了问题。我猜 Hibernate 试图在数据库中找到它自己的序列,而不是我的序列。