OpenJDK下Hibernate报错:无法访问私有最终字段
解决Eclipse中Hibernate控制台配置的
InaccessibleObjectException错误 这个问题我之前帮同事排查过,本质是Java 9及以上版本的模块系统(JPMS)默认限制了对JDK内部API的访问,而你用的Hibernate工具版本可能还在调用这些被封装的内部类。下面是几个亲测有效的解决办法:
方法一:给Eclipse添加JVM参数开放模块权限
这是最快的临时解决方案,通过JVM参数让Java开放对应的内部包给未命名模块:
- 打开Eclipse,点击顶部菜单栏的
Window→Preferences - 依次展开
Java→Installed JREs - 选中你当前项目使用的JRE/JDK,点击右侧的「Edit」按钮
- 在「Default VM arguments」输入框里添加以下参数:
如果后续还有类似的模块访问错误,可以追加对应的参数,比如常见的:--add-opens java.base/jdk.internal.loader=ALL-UNNAMED--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED - 点击「Finish」保存,重启Eclipse后再尝试创建Hibernate控制台配置
方法二:降级到Java 8(最省心的长期方案,如果项目允许)
Java 8没有模块系统的限制,Hibernate工具对Java 8的兼容性完美:
- 在Eclipse的「Installed JREs」中添加Java 8的JDK/JRE
- 把项目的编译级别、运行环境都切换到Java 8
- 重启Eclipse后重新配置Hibernate控制台,大概率不会再出问题
方法三:升级Hibernate工具到最新兼容版本
有些旧版Hibernate工具对Java 9+的模块系统支持不足,去Eclipse Marketplace搜索「Hibernate Tools」,更新到最新版后再尝试配置——新版本通常已经修复了这类模块访问的兼容性问题
额外说明:这个错误的核心是JDK的模块封装机制,传统类路径下的代码(未命名模块)默认无法访问被模块封装的内部API。
--add-opens是临时绕过限制的办法,长期来看还是建议使用适配Java 9+的Hibernate工具版本,或者根据项目需求调整Java版本。
内容的提问来源于stack exchange,提问作者Nina33
相关产品推荐
相关产品推荐

