Jakarta JPA+Hibernate配置报错:The application must supply JDBC connections
解决“The application must supply JDBC connections”错误(Jakarta JPA + Hibernate)
问题根源
- 命名空间与属性前缀不匹配:Hibernate 5.4.x 基于JPA 2.2(Java EE规范),但你的
persistence.xml使用了Jakarta EE 3.0的命名空间,且用了jakarta.persistence.*前缀的属性,导致Hibernate无法识别JDBC连接配置,被迫进入“用户手动提供连接”模式。 - MySQL方言与驱动版本不兼容:使用了MySQL 8.0驱动,但配置的是旧版
MySQLDialect,无法适配新版MySQL的特性。 - JDBC URL未配置有效值:配置中的
MyURL是占位符,必须替换为真实的数据库连接地址。
解决方案
1. 修正persistence.xml配置
改用JPA 2.2的命名空间与属性前缀,同时适配MySQL 8.0的方言:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd" version="2.2"> <persistence-unit name="supermercado"> <class>Cliente</class> <properties> <!-- JPA 2.2标准属性前缀 --> <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/> <!-- 替换为真实JDBC地址,示例格式:jdbc:mysql://localhost:3306/你的数据库名?serverTimezone=UTC&useSSL=false --> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/supermercado?serverTimezone=UTC&useSSL=false"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value=""/> <!-- 适配MySQL 8.0的方言 --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/> <property name="hibernate.hbm2ddl.auto" value="create"/> </properties> </persistence-unit> </persistence>
2. 调整依赖版本一致性
Hibernate 5.4.x与Jakarta EE 3.0的依赖存在冲突,调整JAXB依赖为Java EE版本,避免兼容性问题:
dependencies { implementation('org.hibernate:hibernate-core:5.4.24.Final') implementation('org.glassfish.jaxb:jaxb-runtime:2.3.6') // 改用Java EE规范的JAXB版本 implementation("mysql:mysql-connector-java:8.0.31") // 与Hibernate 5.x兼容的MySQL驱动坐标 testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}") }
3. 额外验证项
- 确认MySQL服务处于运行状态,JDBC URL中的主机、端口、数据库名称完全正确。
- 检查
Cliente类是否添加了@Entity、@Id等必要的JPA注解,且类文件在类路径下可被Hibernate扫描到。
内容的提问来源于stack exchange,提问作者3mptySl
相关产品推荐
相关产品推荐

