Hibernate和PostgreSQL-序列以-46开头

Hibernate和PostgreSQL-序列以-46开头,postgresql,hibernate,Postgresql,Hibernate,我在SpringWeb应用程序中使用Hibernate框架和PostgreSQL数据库。例如,我有一个名为agent_id_seq的序列,在Begging中,我通过 alter sequence agent_id_seq minvalue 1 start with 1; 我使用Hibernate添加记录,在我使用Hibernate删除记录并使用Hibernate添加另一个记录之前,一切都正常。它使我的序列以-46值开始!如何解决这个问题 我的代理模型 @Entity @Table(name =

我在SpringWeb应用程序中使用Hibernate框架和PostgreSQL数据库。例如,我有一个名为agent_id_seq的序列,在Begging中,我通过

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;

如果您从PostgreSQL而不是Hibernate创建序列,那么它的增量是1。但是Hibernate盲目地假设所有序列的增量都是50,除非另有说明

因此,当它得到值1作为结果时,它假设这是生成的键的可用范围内的最后一个值
(2-49)。。2

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


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

< P>如果您从PostgreSQL创建一个序列,而不是Hibernate,则使用1的<代码>增量>代码创建。但是Hibernate盲目地假设所有序列的增量都是50,除非另有说明

因此,当它得到值1作为结果时,它假设这是生成的键的可用范围内的最后一个值
(2-49)。。2

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

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