问题:找不到表,项目启动失败
MySQL 里已经 RENAME TABLE old_name TO new_name; 了,但项目一启动就抛
Table 'xxx.old_name' doesn't exist,说明 代码/配置里还有地方没改 。
按下面 4 个层次一次性扫干净即可解决。
- Java 实体/映射层(最常见)
- JPA:
@Table(name = "old_name")→ 改成新表名 - MyBatis XML:
<select id="xxx" resultType="Xxx" table="old_name">或 SQL 语句里写死的FROM old_name - MyBatis-Plus:
@TableName("old_name") - Hibernate:
hibernate.hbm2ddl.auto=validate时也会校验表名,务必同步。
- Spring 配置文件
spring.datasource.schema/data里如果写了old_name.sql初始化脚本,一起改名。- Flyway/Liquibase 脚本:
- 若已执行过的脚本里包含旧表名,不要改历史脚本 ,而是 新增一条迁移脚本 把旧表 rename 成新表;
- 若脚本尚未在生产执行,可直接改脚本后重新跑。
- 二级缓存 / MyBatis-Plus 全局缓存
-
MyBatis-Plus 3.4+ 默认带 表映射缓存 ,改表名后缓存仍指向旧表。
解决:清掉target/、build/目录,重新编译;或在启动参数里加mybatis-plus.global-config.db-config.table-underline=true mybatis-plus.configuration.cache-enabled=false临时关闭缓存验证。
- 数据库连接池 / 多数据源路由
- 若用了 ShardingSphere、动态数据源