You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot3+Hibernate Envers6升级后缺失revinfo_seq序列报错求助

解决Envers 6.1.6.Final启动报错"revinfo_seq不存在"的问题

问题原因

Hibernate Envers 6.0+ 对默认的RevisionEntity ID生成策略做了变更:从TABLE表生成器改为SEQUENCE序列生成器,以提升性能。你的旧版本(5.6.8)依赖TABLE生成器,不需要序列就能运行;但升级到6.x后,默认会尝试使用revinfo_seq序列生成revision值,而你的数据库中没有这个序列,也没有显式指定其他生成策略,因此报错。

解决方案

根据你的需求,有三种可行方案:

方案1:继续使用TABLE生成器(和旧版本逻辑一致)

在自定义的RevisionEntity类中,显式指定ID使用TABLE生成器,替代默认的SEQUENCE策略:

@Entity
@Table(name = "revinfo")
public class CustomRevisionEntity extends DefaultRevisionEntity {
    // 你的自定义字段:client_id、correlation_id等

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "revision_table_generator")
    @TableGenerator(
        name = "revision_table_generator",
        table = "hibernate_envers_rev_seq", // Envers 5.x默认的生成器表名
        pkColumnName = "sequence_name",
        valueColumnName = "next_val",
        pkColumnValue = "revinfo",
        initialValue = 1,
        allocationSize = 1
    )
    @Column(name = "revision")
    private long id;

    // 省略getter、setter
}

配置后,Envers会通过表存储自增数值,不再依赖序列。

方案2:切换到SEQUENCE生成器(推荐,性能更优)

步骤1:创建序列

可以手动在PostgreSQL中创建序列:

CREATE SEQUENCE revinfo_seq START WITH 1 INCREMENT BY 1;

或者确保spring.jpa.hibernate.ddl-auto:create配置生效,Hibernate会自动生成该序列。

步骤2:在自定义RevisionEntity中指定SEQUENCE策略

@Entity
@Table(name = "revinfo")
public class CustomRevisionEntity extends DefaultRevisionEntity {
    // 你的自定义字段

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "revinfo_seq_generator")
    @SequenceGenerator(
        name = "revinfo_seq_generator",
        sequenceName = "revinfo_seq",
        initialValue = 1,
        allocationSize = 1
    )
    @Column(name = "revision")
    private long id;

    // 省略getter、setter
}

方案3:使用IDENTITY原生生成策略

步骤1:修改revinfo表结构

将revision列改为PostgreSQL的IDENTITY自增列:

ALTER TABLE revinfo ALTER COLUMN revision ADD GENERATED ALWAYS AS IDENTITY;

步骤2:启用Envers原生ID配置

在application.properties/application.yml中添加:

org.hibernate.envers.use_revision_entity_with_native_id=true

此配置会让Envers使用数据库原生的自增机制,无需序列或额外表。

内容的提问来源于stack exchange,提问作者vfluegel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:50:31