Navicat更改MySql表名后IDEA项目启动会找原来的表
问题:找不到表,项目启动失败
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、动态数据源