Spring Boot集成hibernate-jpamodelgen编译出现土耳其字符非法报错如何解决
Hibernate JPA元模型生成土耳其字符报错解决方案
问题根因
该错误由hibernate-jpamodelgen的默认locale逻辑导致:生成元模型代码时默认使用操作系统当前locale,土耳其locale下字符大小写转换规则和ASCII标准不一致,i字符会被转为特殊土耳其字符ı,最终生成的代码包含非法字符触发编译错误。
解决方案
方案1:固定编译环境locale(全版本通用)
根据你使用的构建工具修改对应配置即可:
Maven项目
修改pom.xml中maven-compiler-plugin配置,指定编译时使用英文locale:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <!-- 必须开启fork,否则JVM参数不生效 --> <fork>true</fork> <compilerArgs> <arg>-J-Duser.language=en</arg> <arg>-J-Duser.region=US</arg> </compilerArgs> </configuration> </plugin>
配置完成后执行mvn clean compile验证即可。
Gradle项目
- Groovy DSL(build.gradle)添加如下配置:
tasks.withType(JavaCompile) { options.fork = true options.forkOptions.jvmArgs += ['-Duser.language=en', '-Duser.region=US'] }
- Kotlin DSL(build.gradle.kts)添加如下配置:
tasks.withType<JavaCompile> { options.isFork = true options.forkOptions.jvmArgs.addAll(listOf("-Duser.language=en", "-Duser.region=US")) }
配置完成后执行./gradlew clean compileJava验证即可。
方案2:升级依赖版本
如果你的项目可以升级Hibernate版本,直接将hibernate-jpamodelgen升级到6.0及以上版本即可,该版本起官方已经修复了locale相关的字符转换问题,无需额外配置参数。
内容的提问来源于stack exchange,提问作者Furkan Işıtan
相关产品推荐
相关产品推荐

