使用Java、Gradle搭配Hibernate连接数据库找不到Referenceable类如何解决
问题原因
你当前使用的是Java 9及以上版本的模块化项目(存在module-info.java配置文件),报错提示中缺失的javax.naming.Referenceable类属于JDK内置的java.naming模块,你没有在模块声明中引入该模块,导致编译阶段无法加载对应类。
解决方案
有两种可选方案,按需选择即可:
- 方案1:保留模块化配置,补充缺失的模块依赖
修改你的module-info.java,添加java.naming的依赖声明,同时需要开放你的实体类所在包给Hibernate,否则Hibernate无法通过反射访问实体类属性:
module PhoneBook { requires javafx.controls; requires javafx.fxml; requires javafx.graphics; requires org.hibernate.orm.core; // 新增:引入JDK内置的naming模块 requires java.naming; // 新增:将实体类所在包开放给Hibernate,示例包名请替换为实际的实体类存放路径 opens 你的实体类包路径 to org.hibernate.orm.core; exports app; }
- 方案2:不使用模块化,直接删除
module-info.java
如果你的项目不需要用到Java模块化特性,可以直接删掉module-info.java文件,项目会自动运行在无名模块下,无需额外声明模块依赖即可正常编译运行。
内容的提问来源于stack exchange,提问作者user17142684
相关产品推荐
相关产品推荐

