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
相关产品推荐
相关产品推荐

