Hibernate和PostgreSQL - 序列以-46开头

时间:2017-01-02 11:44:05

标签: postgresql hibernate

我在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;

1 个答案:

答案 0 :(得分:4)

如果你从PostgreSQL而不是Hibernate创建一个序列,那么它的创建时INCREMENT为1.但是Hibernate盲目地假设所有序列的INCREMENT都是50,除非另有说明。< / p>

因此,当它获得值1时,它假定“生成密钥(2-49) .. 2的可用范围中的最后一个值。

要修复它,请在映射上指定显式增量,或将ALTER PostgreSQL序列的增量指定为50

我个人认为这是一个严重的Hibernate错误。