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

升级Spring Boot3.3.2+Hibernate6.5.2后Liquibase脚本执行报错求助

问题原因与解决方案

核心原因:Hibernate 6.5的主键序列行为变更

Hibernate 6.5版本开始,对使用IDENTITY主键生成策略的实体,会自动将对应的序列创建为PostgreSQL标识序列(identity sequence)。这类序列与表的主键列强绑定,PostgreSQL会限制对其执行ALTER SEQUENCE ... OWNED BY语句,因为系统已经默认完成了绑定关系。

而在Hibernate 6.2及更早版本中,Hibernate不会创建这种强绑定的标识序列,生成的是普通序列,所以执行ALTER SEQUENCE修改所有权的操作可以正常执行。

适配方案

针对这个问题,有两种可行的调整方式:

  • 删除冗余的Liquibase语句:如果你的主键序列与表的绑定关系不需要手动维护,直接移除脚本中的ALTER SEQUENCE id_seq OWNED BY public.[table_name].id语句即可。Hibernate 6.5已经自动完成了序列与主键列的绑定,该语句属于冗余操作。
  • 修改主键生成策略:若必须保留序列所有权的配置,可将实体类的主键生成策略从IDENTITY改为SEQUENCE,并显式指定序列信息。这样Hibernate会生成普通序列,允许执行ALTER SEQUENCE语句。示例代码:
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_seq")
    @SequenceGenerator(name = "id_seq", sequenceName = "id_seq", allocationSize = 1)
    private Long id;
    

补充说明

Spring Boot 3.3.2本身并未直接修改序列相关逻辑,问题源于它默认适配的Hibernate 6.5.x版本带来的行为变更。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:08:14