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

Flyway迁移旧版本SQL文件而非当前更新文件的问题排查

Flyway迁移后生成旧表而非预期表的问题解决

问题场景

执行mvn flyway:clean清空数据库后,运行mvn flyway:migrate执行迁移文件V1__Create_games_table.sql,Flyway的info命令显示V1迁移已成功,但启动Spring Boot程序后,数据库中生成的是旧表trivias而非预期的games表,同时flyway_schema_history表状态正常。

原因分析

问题出在Spring Boot的JPA自动DDL配置上。你的application.properties中设置了spring.jpa.hibernate.ddl-auto=update,该配置会让Hibernate在程序启动时,根据项目中存在的实体类自动创建/更新数据库表。如果项目中仍存在对应trivias表的实体类,启动程序时Hibernate就会自动生成这个旧表,覆盖或补充Flyway的迁移结果。

解决方案

  1. 禁用Hibernate自动DDL功能
    修改application.properties中的配置,将spring.jpa.hibernate.ddl-auto设为none,让Flyway全权负责数据库结构管理:
spring.jpa.hibernate.ddl-auto=none

这是使用Flyway时的标准配置,避免ORM框架与迁移工具的冲突。

  1. 清理废弃代码与数据库
  • 删除项目中对应trivias表的实体类(若该表已废弃)
  • 执行mvn flyway:clean清空数据库
  • 重新执行mvn flyway:migrate执行迁移
  • 启动程序,此时数据库应仅生成flyway_schema_history和games两张表

验证步骤

运行flyway info确认迁移状态为成功,再通过MySQL Workbench查看数据库表结构,确认只有预期的表存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:23:33