我在Spring Web应用程序中使用Hibernate Framework和PostgreSQL数据库。我有例如名为agent_id_seq的序列,并且在开始时我通过
改变这个序列alter sequence agent_id_seq
minvalue 1
start with 1;
我正在使用Hibernate添加记录,一切正常,直到我使用Hibernate删除记录并使用Hibernate添加另一条记录。它使我的序列以-46值开始!如何解决这个问题?
我的代理模型
@Entity
@Table(name = "agent")
public class Agent {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "agent_seq_gen")
@SequenceGenerator(name = "agent_seq_gen", sequenceName = "agent_id_seq")
@Column(name = "id")
private long id;
答案 0 :(得分:4)
如果你从PostgreSQL而不是Hibernate创建一个序列,那么它的创建时INCREMENT
为1.但是Hibernate盲目地假设所有序列的INCREMENT
都是50,除非另有说明。< / p>
因此,当它获得值1时,它假定“生成密钥(2-49) .. 2
的可用范围中的最后一个值。
要修复它,请在映射上指定显式增量,或将ALTER
PostgreSQL序列的增量指定为50
。
我个人认为这是一个严重的Hibernate错误。