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

Spring Boot 2.2.7升级至3.2.4后Liquibase解析报错求助

问题根源与修复方案

原因分析

这个报错是**Liquibase版本升级(从Spring Boot 2.2.7配套的旧版本到4.24.0)**导致的,和Hibernate无关。旧版Liquibase对changelog格式校验宽松,允许错误地把changeSet嵌套在另一个changeSet的changes节点下,但新版Liquibase严格遵循官方schema规范——changes节点下只能放具体的变更操作(比如createTable、addForeignKeyConstraint),不能嵌套changeSet。

你的changelog里,id为2的changeSet的changes节点下直接写了另外两个changeSet(id3和id4),这违反了格式规则,因此触发报错。

修复方法

把嵌套的changeSet移到databaseChangeLog根节点下,作为同级节点即可,修正后的changelog如下:

databaseChangeLog:
  - changeSet:
      id: '2'
      author: Jhon Doe
      preConditions:
        - onFail: MARK_RAN
        - not:
            - tableExists:
                tableName: dummy_table
      changes:
        - createTable:
            tableName: dummy_user
            columns:
              - column:
                  name: dummy_id
                  type: varchar(100)
                  constraints:
                    primaryKey: true
              - column:
                  name: site_id
                  type: bigint
              - column:
                  name: user_id
                  type: bigint
                  constraints:
                    primaryKey: true
              - column:
                  name: creation_date
                  type: TIMESTAMP
                  constraints:
                    nullable: false
              - column:
                  name: last_modification_date
                  type: TIMESTAMP
                  constraints:
                    nullable: false
              - column:
                  name: created_by
                  type: varchar(255)
                  constraints:
                    nullable: false
              - column:
                  name: last_modified_by
                  type: varchar(255)
                  constraints:
                    nullable: false
  - changeSet:
      id: '3'
      author: Jhon Boy
      changes:
        - addForeignKeyConstraint:
            constraintName: fk_dummmy
            baseTableName: dummy_user
            baseColumnNames: site_id
            referencedTableName: site
            referencedColumnNames: id
            validate: true
  - changeSet:
      id: '4'
      author: Luffy
      changes:
        - addForeignKeyConstraint:
            constraintName: fk_dummy_user_s
            baseTableName: dummy_user
            baseColumnNames: user_id
            referencedTableName: user
            referencedColumnNames: id
            validate: true

版本变更参考

Liquibase 4.x版本开始加强了changelog的格式校验,严格执行官方定义的schema规则,这类非法嵌套结构会被直接拦截。你可以查看Liquibase 4.x的版本变更文档,其中"changelog validation"相关部分明确提到了格式校验的严格化调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:10:09