Grails+MySQL环境下Hibernate自动生成表失败,db_user表不存在报错
排查及修复步骤
- 首先确认USER域类的表映射配置是否正确,mapping块写法必须为:
static mapping = { table "db_user" }
不要依赖全局命名转换自动生成表名,直接写死字符串db_user即可。
- 校验MySQL表名大小写配置:你使用的MySQL 8.0在Linux环境下默认表名区分大小写,登录数据库执行命令
show variables like 'lower_case_table_names';,如果返回值为0,确认umm库中实际存在的表名是全小写的db_user,而非DB_USER、Db_User等大小写不一致的名称。 - 核对数据源配置:检查application.yml中datasource的url指定的库名确实为
umm无拼写错误,使用配置中的数据库账号密码手动登录,执行select * from umm.db_user limit 1;确认可正常查询,排除权限不足问题。 - 调整Hibernate DDL配置:如果当前
hibernate.hbm2ddl.auto配置为validate,启动时会校验表结构与域类的匹配度,若db_user不是自动生成的,可暂时将配置改为update让框架自动生成该表,也可手动按照域类字段定义创建db_user表,保证字段名、类型与域类完全一致。 - 排除多配置文件冲突:你同时使用了application.groovy和application.yml两个配置文件,Grails 3.x中application.groovy的加载优先级高于application.yml,检查两个文件中是否存在重复的数据源、Hibernate配置,确保高优先级配置中没有错误的表映射或数据源参数。
内容的提问来源于stack exchange,提问作者iUbaid
相关产品推荐
相关产品推荐

