【问题标题】:Hibernate and PostgreSQL - sequence start with -46Hibernate 和 PostgreSQL - 序列以 -46 开头
【发布时间】:2017-01-02 19:48:29
【问题描述】:

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

【问题讨论】:

    标签: postgresql hibernate


    【解决方案1】:

    如果您从 PostgreSQL 而不是 Hibernate 创建一个序列,它的 INCREMENT 为 1。但 Hibernate 盲目假设所有序列的 INCREMENT 为 50,除非另有说明。

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

    要修复它,请在映射上指定一个显式增量,或在 PostgreSQL 序列上指定 ALTER 增量到 50

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

    【讨论】:

      猜你喜欢
      • 2018-09-14
      • 1970-01-01
      • 2015-06-12
      • 2021-02-11
      • 2017-04-30
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多