Hibernate+Maven项目连接谷歌云MySQL出现java.sql.SQLException类未找到异常
问题根因
报错java.lang.ClassNotFoundException: java.sql.SQLException是因为你使用了Java 9+的JPMS模块化系统(配置了module-info.java),但没有声明依赖JDK内置的java.sql模块,JDBC相关的核心类都属于该模块,导致Hibernate初始化时找不到必要的SQL基础类。
解决方案
1. 修改module-info.java配置
补充缺失的模块依赖声明,同时开放实体类包给Hibernate做反射访问,修改后的完整配置如下:
module SlidingPuzzle { requires javafx.controls; requires javafx.fxml; requires java.persistence; // 新增以下3个依赖声明 requires java.sql; requires org.hibernate.orm.core; requires mysql.connector.java; opens controllers to javafx.fxml; // 开放实体类所在包给Hibernate和JPA,用于反射操作实体字段 opens models.database to org.hibernate.orm.core, java.persistence; exports controllers; }
2. 验证持久化配置路径
确认你的persistence.xml放在项目的src/main/resources/META-INF/路径下,且文件内配置的持久化单元名称和代码中Persistence.createEntityManagerFactory("manager1")传入的manager1完全一致,同时检查谷歌云MySQL的连接地址、用户名、密码、驱动类配置正确。
3. 可选排查方案
如果修改后仍有类找不到的问题,可以临时删除module-info.java关闭模块化系统,验证功能是否正常。如果关闭模块化后运行正常,说明剩余报错仍为模块依赖声明遗漏,可根据具体报错信息补充对应的requires声明即可。
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

