You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX集成Hibernate创建EntityManagerFactory时报模块访问错误如何解决

问题原因

该错误是Java 9+模块化系统(JPMS)的权限限制导致:Hibernate需要为你的实体类动态生成代理类,代理类要实现的org.hibernate.proxy.ProxyConfiguration接口存放在未命名模块中,而你声明的org.application模块默认没有读取未命名模块类的权限,因此触发访问错误。

解决方案

方案1:修改module-info.java配置(优先推荐)

在项目的module-info.java文件中添加以下配置,原有JavaFX、依赖导出等配置保留即可:

module org.application {
    // 原有JavaFX相关依赖
    requires javafx.controls;
    requires javafx.fxml;
    // 持久化相关依赖
    requires java.persistence;
    requires org.hibernate.orm.core;
    // 允许当前模块读取未命名模块的类
    requires static unnamed;
    // 开放实体类所在包给Hibernate,允许反射访问和代理生成
    // 替换成你自己的实体类所在包路径
    opens org.application to org.hibernate.orm.core, java.persistence;
    opens org.application.entity to org.hibernate.orm.core, java.persistence;
    // 原有导出配置保留
    exports org.application;
}

方案2:添加JVM启动参数

如果修改模块描述符后仍报错,可在IDE运行配置中添加如下JVM参数,显式授权模块读取未命名模块:

--add-reads org.application=ALL-UNNAMED

如果使用Maven的javafx插件运行,可在插件配置中添加参数:

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.8</version>
    <configuration>
        <mainClass>org.application/org.application.App</mainClass>
        <options>
            <option>--add-reads org.application=ALL-UNNAMED</option>
        </options>
    </configuration>
</plugin>
校验项
  • 确认所有实体类都存在public无参构造方法,这是Hibernate生成代理的必要前提
  • 确认Hibernate与ByteBuddy依赖版本匹配,无版本冲突问题

内容的提问来源于stack exchange,提问作者onlu174

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:09:03