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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:10:47