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

配置Jakarta Persistence3.0+Hibernate5.6遇持久化提供者缺失错误求助

解决Jakarta Persistence 3.0的"No Persistence provider"错误

针对你遇到的jakarta.persistence.PersistenceException: No Persistence provider for EntityManager named myPersistence错误,以下是具体的排查和修复步骤:

核心问题排查

这个错误通常由以下几个原因导致:

  • Hibernate依赖未正确引入或版本不兼容
  • persistence.xml文件位置不符合JPA规范
  • 实体类缺少JPA强制要求的无参构造器
  • 缺少MySQL数据库驱动依赖

分步修复

1. 修正Maven依赖配置

Hibernate 5.6.x完全兼容Jakarta Persistence 3.0,确保依赖完整且版本匹配,同时添加MySQL驱动:

<dependencies>
    <!-- Jakarta Persistence API -->
    <dependency>
        <groupId>jakarta.persistence</groupId>
        <artifactId>jakarta.persistence-api</artifactId>
        <version>3.0.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- Hibernate核心实现 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.6.15.Final</version> <!-- 优先使用稳定的最新小版本 -->
    </dependency>
    <!-- MySQL JDBC驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

注:将jakarta.persistence-api设为provided是因为Hibernate核心已经包含了兼容的API版本,避免重复依赖冲突。

2. 确认persistence.xml的位置

必须把persistence.xml放在项目的src/main/resources/META-INF/目录下,这是JPA规范规定的默认扫描路径,否则Persistence Provider无法加载配置。

3. 给实体类添加无参构造器

JPA强制要求实体类必须有一个公共或受保护的无参构造器,Hibernate需要通过反射创建实体实例。修改BookAuthor类:

// 添加无参构造器
public BookAuthor() {}

// 保留原有的带参构造器
public BookAuthor(String first, String last, String bio) {
    this.first = first;
    this.last = last;
    this.bio = bio;
}

4. 补充Hibernate方言配置(可选但推荐)

在persistence.xml的properties中添加方言配置,避免Hibernate自动检测数据库方言出错:

<properties>
    <!-- 原有数据库连接配置 -->
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
</properties>

5. 优化主方法的资源管理

主方法中需要确保资源在异常时也能正确关闭,避免内存泄漏:

public static void main(String[] args) {
    EntityManagerFactory emf = null;
    EntityManager em = null;
    try {
        emf = Persistence.createEntityManagerFactory("myPersistence");
        em = emf.createEntityManager();
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        
        BookAuthor author = new BookAuthor("Sadiul", "Hakim", "I am a Full Stack Java Developer.");
        em.persist(author);
        
        transaction.commit();
    } catch (Exception e) {
        e.printStackTrace();
        // 异常时回滚事务
        if (em != null && em.getTransaction().isActive()) {
            em.getTransaction().rollback();
        }
    } finally {
        // 关闭资源
        if (em != null) em.close();
        if (emf != null) emf.close();
    }
}

验证方法

  1. 执行mvn clean compile确保依赖下载完成且编译无错误
  2. 运行主方法,检查MySQL数据库中是否生成了BookAuthor表并插入了对应数据

内容的提问来源于stack exchange,提问作者sadiul-hakim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:16:11