Spring Boot部署到CentOS7的Tomcat9时Hibernate Envers提示revınfo不存在
问题根因
你遇到的报错核心是操作系统Locale的语言转换规则导致的表名拼写异常:
异常信息中的revınfo第二个字符为土耳其语小写不带点ı,并非你预期的英文小写i。当CentOS 7系统配置了土耳其语(tr_TR)系列Locale时,Java的字符串大小写转换会遵循土耳其语规则:大写I会被转为小写ı而非英文小写i。Hibernate Envers默认的审计记录表名为大写REVINFO,转换为小写时触发该规则,最终生成的SQL查询不存在的revınfo表,和数据库中实际存在的revinfo表不匹配。
解决方案
你可以任选以下一种方案解决:
- 方案1(最稳妥,不受环境影响):在现有JPA配置中显式指定Envers审计表名,跳过自动转换逻辑
新增配置项:
该配置直接指定查询的表名和你数据库中已有的put("org.hibernate.envers.revision_table_name", "revinfo");revinfo完全匹配,无需修改任何环境配置。 - 方案2(修改Tomcat启动参数,强制JVM使用英文Locale):
在Tomcat安装目录的bin/setenv.sh文件(无该文件则手动创建)中添加如下配置:
保存后重启Tomcat即可生效,强制JVM使用英文大小写转换规则,大写export CATALINA_OPTS="$CATALINA_OPTS -Duser.language=en -Duser.region=US -Dfile.encoding=UTF-8"I会正确转为小写i。 - 方案3(修改CentOS系统全局Locale):
执行命令将系统默认Locale改为英文UTF-8:
执行完成后重启系统或重启Tomcat服务即可生效。localectl set-locale LANG=en_US.UTF-8
内容的提问来源于stack exchange,提问作者estherial
相关产品推荐
相关产品推荐

