我使用spring的序列生成器为实体分配主键。
模型包括:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_post")
@SequenceGenerator(name = "seq_post", allocationSize = 5)
private Long id;相应的序列定义(用于Server ):
CREATE SEQUENCE dbo.seq_post START WITH 1 INCREMENT BY 5;因为我想从100而不是1开始I,所以我将sql脚本更新为
CREATE SEQUENCE dbo.seq_post START WITH 100 INCREMENT BY 5;然后,我遇到了这里提到的问题。我用上面提到的解决办法解决了这个问题。
这让我想知道,当我希望DB序列从1开始时,为什么这个问题不会发生呢?根据提到的这里的答案,我希望ids不会从1开始,但不会发生。为什么是这种情况?
发布于 2021-06-11 15:04:15
首先,检查是否将属性hibernate.id.new_generator_mappings设置为true为复述
而不是用序列allocationSize来调整INCREMENT BY。
如果您想使用特定的值启动ID,那么它似乎遵循以下规则:
START WITH 1 (这似乎是一个例外)X > 1开始,设置START WITH X + 50序列(当然,X < 1也是如此)例如,从5000开始,使用默认的allocationSize of 50,定义序列如下
create sequence sub_seq
START WITH 5050
INCREMENT BY 50
NOCACHE;请注意,我使用的是NOCACHE选项,因为我假设Hibernate是这个序列的唯一用户,因此缓存不是真实的满的(实际上是用分配大小替换的)。
您还可以在会话之间放松大约。allocationSize的1/2,您不希望增加缓存的IDs的额外损失。
https://stackoverflow.com/questions/67649400
复制相似问题