Contents

Hibernate 错误“ EntityManager无持续性提供程序”

1. 简介

在本教程中,我们将看到如何解决一个常见的Hibernate错误——“EntityManager 没有持久性提供程序”。简单地说,持久化提供者是指在我们的应用程序中用于将对象持久化到数据库中的特定 JPA 实现。

要了解有关 JPA 及其实现的更多信息,我们可以参考我们关于JPA、Hibernate 和 EclipseLink 之间区别 的文章。

2. 什么原因导致错误

当应用程序不知道 应该使用哪个持久性提供程序时,我们会看到错误。

persistence.xml文件中既没有提到持久性提供程序,也没有在PersistenceUnitInfo实现类中配置持久性提供程序时,就会发生这种情况。

3. 修复错误

要修复这个错误,我们只需要persistence.xml文件中定义持久化提供者:

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

或者,如果我们使用的是Hibernate 4.2 或更早版本

<provider>org.hibernate.ejb.HibernatePersistence</provider>

如果我们在应用程序中实现了PersistenceUnitInfo接口,我们还必须重写*getPersistenceProviderClassName()*方法:

@Override
public String getPersistenceProviderClassName() {
    return HibernatePersistenceProvider.class.getName();
}

为了确保所有必要的 Hibernate jar 可用,在pom.xml文件中添加hibernate-core 依赖项很重要:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
</dependency>