我的SequenceGenerator的allocationSize为5(与hibernate.id.new_generator_mappings = true一起)。所以根据我的理解,hibernate应该尝试将这些值作为新的id返回:
返回67作为新ID。
所以id应该在66到70之间。我的问题是生成的id是65到69.如果我从数据库中调用next_value(postgres)并且序列返回65,我得到一个重复的键hibernate之后也会产生65错误(从序列中获得70之后)。
有关此主题的任何线索或帮助?
€:抱歉,忘记发布我的代码:
发电机:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = GENERATOR_NAME)
@SequenceGenerator(sequenceName = "hibernate_sequence", name = GENERATOR_NAME, allocationSize = 5)
private Integer id;
序列(Postgresql):
CREATE SEQUENCE hibernate_sequence
INCREMENT 5
MINVALUE 1
MAXVALUE 9223372036854775807
START 10041865
CACHE 1;
答案 0 :(得分:1)
您需要使用pooled-lo optimizer,因为它可以与其他系统互操作,或者从管理控制台发出插入:
@Id
@GenericGenerator(name = "sequenceGenerator", strategy = "enhanced-sequence",
parameters = {
@org.hibernate.annotations.Parameter(
name = "optimizer",
value = "pooled"),
@org.hibernate.annotations.Parameter(
name = "initial_value",
value = "1"),
@org.hibernate.annotations.Parameter(
name = "increment_size",
value = "5")
}
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "sequenceGenerator")
private Long id;
答案 1 :(得分:-1)
更改 hbm2ddl.auto 配置,将其设置为create
然后它将起作用,因为用于在表中分配id的序列值取决于先前存储的序列号,而不是错误。
<property name="hbm2ddl.auto">create</property>