我正在使用Spring Data JPA的序列生成器为实体分配主键。
模型包含:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_post")
@SequenceGenerator(name = "seq_post", allocationSize = 5)
private Long id;
对应的序列定义(针对 SQL Server 数据库):
CREATE SEQUENCE dbo.seq_post START WITH 1 INCREMENT BY 5;
由于我想从100开始而不是1,因此我更新了SQL脚本如下:
CREATE SEQUENCE dbo.seq_post START WITH 100 INCREMENT BY 5;
然后我遇到了如此所述的问题。我通过那里提到的解决方案来解决它。
这让我想知道,当我想让数据库序列从1开始时,为什么不会发生这个问题?根据这里提到的答案,我预期id不会从1开始,但实际上并非如此。这是为什么呢?
Hibernate
是开源的,因此您应该能够找到new_generator_mappings
的源代码。您会发现一行代码,其中包含if (nextval == 1) ... else ... subtract allocationSize
。 - Marmite Bomber