EntityManager命名为default无持久化提供者的问题排查与解决求助
问题:找不到名为
default的EntityManager持久化提供者 报错信息
[16:16:45 WARN]: [jakarta.persistence.spi] jakarta.persistence.spi::No valid providers found. jakarta.persistence.PersistenceException: No Persistence provider for EntityManager named default at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:86) ~[?:?] at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) ~[?:?]
触发代码
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("default"); EntityManager entityManager = entityManagerFactory.createEntityManager();
使用的依赖
dependencies { implementation('org.hibernate:hibernate-core:6.1.6.Final') implementation('org.postgresql:postgresql:42.5.1') }
persistence.xml配置
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <persistence xmlns="https://jakarta.ee/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd" version="3.0"> <persistence-unit name="default"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <class>me.janic.database.PlayerEntity</class> <class>me.janic.database.ReviveTokenEntity</class> <class>me.janic.database.StatsEntity</class> <properties> <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/1l1c"/> <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="root"/> </properties> </persistence-unit> </persistence>
注:persistence.xml文件位于
META-INF/persistence.xml路径下,已尝试更换不同版本Hibernate,问题未解决。
问题原因及解决方法
1. 检查persistence.xml的实际存放路径
确保文件放在**src/main/resources/META-INF/**目录下(Gradle/Maven标准资源目录),而非src/main/java或其他目录。编译后可查看build/classes/java/main/META-INF/目录,确认该文件是否已被正确打包到类路径中。
2. 补充Jakarta Persistence API依赖
Hibernate Core 6.x基于Jakarta EE规范,部分场景下需要显式引入Jakarta Persistence API依赖,避免类路径缺失:
dependencies { implementation('org.hibernate:hibernate-core:6.1.6.Final') implementation('org.postgresql:postgresql:42.5.1') // 添加Jakarta Persistence API依赖 implementation('jakarta.persistence:jakarta.persistence-api:3.1.0') }
3. 验证持久化提供者配置
- 尝试移除
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>标签,让JPA自动扫描类路径中的持久化提供者。 - 确认Hibernate版本对应的提供者类是否正确:Hibernate 6.x中
org.hibernate.jpa.HibernatePersistenceProvider仍有效,若为模块化项目,需在module-info.java中添加requires org.hibernate.orm.core;。
4. 检查运行时类路径
执行./gradlew dependencies查看依赖树,确认Hibernate Core及其传递依赖已被正确引入。同时确保Gradle的run等运行任务已包含所有依赖包。
5. 模块化项目额外检查(Java 9+)
若项目使用Java模块系统,需在module-info.java中声明必要的模块依赖:
module your.module.name { requires jakarta.persistence.api; requires org.hibernate.orm.core; requires org.postgresql.jdbc; // 暴露实体类所在包给Hibernate,使其能反射处理实体 opens me.janic.database to org.hibernate.orm.core; }
内容的提问来源于stack exchange,提问作者user16976770
相关产品推荐
相关产品推荐

