【问题标题】:JPA Error- No Persistence provider for EntityManager namedJPA 错误 - 没有名为 EntityManager 的持久性提供程序
【发布时间】:2016-10-12 02:04:23
【问题描述】:

我根本无法解决这个问题,并且有大量堆栈溢出帖子带有完全相同的错误消息。我已经尝试了所有方法,但仍然无法正常工作。也许我在寻找一些小的东西。我真的需要帮助,提前谢谢你。

错误信息

Initial EntityManagerFactory creation failed.javax.persistence.PersistenceException: No Persistence provider for EntityManager named org.hibernate.ejb.HibernatePersistence
Exception in thread "main" java.lang.ExceptionInInitializerError
    at util.DatabaseUtil.buildSessionFactory(DatabaseUtil.java:18)
    at util.DatabaseUtil.<clinit>(DatabaseUtil.java:8)
    at Test.main(Test.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named org.hibernate.ejb.HibernatePersistence
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at util.DatabaseUtil.buildSessionFactory(DatabaseUtil.java:13)
    ... 7 more

目录结构请忽略 hibernate.cfg.xml 文件,我尝试使用 hibernate sessionFactory 并遇到了一个我也无法解决的重大错误,并说地狱。加上这个post 说 JPA 是首选

这里是需要的jar文件

这里是persistence.xml文件

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">

  <persistence-unit name="com.learning.jpa">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

    <class>com.learning.jpa.entities.User</class>
    <class>com.learning.jpa.entities.Expense</class>
    <class>com.learning.jpa.entities.Category</class>

    <properties>
        <property name="hibernate.connection.pool_size" value="1"/>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/budget_calculator"/>
        <property name="hibernate.onnection.username" value="root"/>
        <property name="hibernate.connection.password" value="password"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>    
    </properties>        
  </persistence-unit>

</persistence>

实体管理器工厂

public class DatabaseUtil {

    private static EntityManagerFactory sessionFactory = buildSessionFactory();

    private static EntityManagerFactory buildSessionFactory() {
        try {
            if (sessionFactory == null) {
                sessionFactory = Persistence.createEntityManagerFactory("org.hibernate.ejb.HibernatePersistence");
            }
            return sessionFactory;
        } catch (Throwable ex) {
            System.err.println("Initial EntityManagerFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static EntityManagerFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        getSessionFactory().close();
    }
}

【问题讨论】:

    标签: hibernate jpa orm


    【解决方案1】:

    您为 Persistence-Unit 使用了错误的标识符。这里指定了它的名称:

    ...
      <persistence-unit name="com.learning.jpa">
      ...
      </persistence-unit>
    </persistence>
    

    StackTrace 告诉你

    没有名为 org.hibernate.ejb.HibernatePersistence 的 EntityManager 的持久性提供程序

    因此,您需要在相关代码 sn-p 中通过其正确的给定名称 com.learning.jpa 引用 PU,如下所示:

    if (sessionFactory == null) {
        sessionFactory = Persistence.createEntityManagerFactory("com.learning.jpa"); 
    }
    

    已更改为正确的 PU 名称,它应该可以工作。希望对您有所帮助。

    【讨论】:

    • 感谢您解决了这个问题。我以前试过这个,实际上这是我最初的,但我一定忽略了这个错误,并认为它是同一个错误,因为这会产生一个新的错误。当我将项目从 Eclipse 移动到 IntelliJ 时,我没有尝试过。我要试一试新的错误,看看我能做什么,这就是你有时学习的方式。
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 2014-12-07
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多