javax.persistence.PersistenceException:没有名为customerManager的EntityManager的持久性提供程序

javax.persistence.PersistenceException:没有名为customerManager的EntityManager的持久性提供程序,java,hibernate,orm,jpa,Java,Hibernate,Orm,Jpa,我是JPA和Hibernate的新手。在阅读了一些在线资料之后,我现在了解了什么是Hibernate,以及如何将它与JPA结合使用 现在,我正在试着运行这个。我已经完成了本教程中提到的所有内容 我没有Oracle数据库,只有MySQL。因此,我使用我对JPA和Hibernate的理解对persistence.xml进行了一些更改(我不知道它是否正确……在我看来它是正确的) 这是我的persistence.xml <persistence xmlns="http://java.sun.com

我是JPA和Hibernate的新手。在阅读了一些在线资料之后,我现在了解了什么是Hibernate,以及如何将它与JPA结合使用

现在,我正在试着运行这个。我已经完成了本教程中提到的所有内容

我没有Oracle数据库,只有MySQL。因此,我使用我对JPA和Hibernate的理解对persistence.xml进行了一些更改(我不知道它是否正确……在我看来它是正确的)

这是我的
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_1_0.xsd" version="1.0">
  <persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>Customer</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.password" value="1234"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
    </properties>
  </persistence-unit>
</persistence>
如有任何建议,我们将不胜感激。

更新:

我已经做了要求做的更改。但是,仍然得到asme错误线


在那篇教程中,他们没有提到任何关于orm.xml的内容。愿它成为问题的起因

您的
persistence.xml
无效,无法创建
EntityManagerFactory
。应该是:

<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_1_0.xsd" version="1.0">
  <persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>Customer</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.password" value="1234"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
    </properties>
  </persistence-unit>
</persistence>
这应该会有所帮助


PS:您还应该按照建议提供一个
log4j.properties

有点晚了,但我遇到了同样的问题,并将schemalocation切换到persistence.xml文件(第1行)中的schemalocation,解决了这个问题。

我面临着同样的问题。我意识到我在persistence.xml中使用了错误的提供程序类

对于Hibernate,它应该是

<provider>org.hibernate.ejb.HibernatePersistence</provider>
org.hibernate.ejb.HibernatePersistence
而对于日食来说应该是这样的

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
org.eclipse.persistence.jpa.PersistenceProvider

只是为了完整性。导致此错误的还有另一种情况:

缺少META-INF/services/javax.persistence.spi.PersistenceProvider 文件

对于Hibernate,它位于
Hibernate entitymanager XXX.jar
,因此,如果
Hibernate entitymanager XXX.jar
不在类路径中,您也会遇到此错误

这个错误消息非常容易引起误解,我花了好几个小时来纠正它


请参阅。

我的经验告诉我,缺少persistence.xml也会生成相同的异常

今天,当我试图运行ant打包的jar包时,我发现了同样的错误msg

当我使用jar-tvf检查jar文件的内容时,我意识到“ant”忘记为我打包persistence.xml

在我手动重新打包jar文件后,错误消息消失了


所以我认为也许你应该简单地把META-INF放在src目录下,然后把persistence.xml放在那里。

我今天也遇到了同样的问题。我的persistence.xml位于错误的位置。我必须把它放在以下路径:

project/src/main/resources/META-INF/persistence.xml

我看到了这个错误,对我来说,问题是persistence.xml的绝对路径中有一个空格,删除这个空格对我有帮助。

当我试图在Tomcat 8中配置JPA entity manager时,我也面临同样的问题。首先,我遇到一个问题,没有找到SystemException类,因此没有创建entityManagerFactory。我删除了hibernate实体管理器依赖项,然后我的entityManagerFactory无法查找持久性提供程序。在经历了大量的研究和时间之后,我们了解到hibernate实体管理器必须查找一些配置。然后放回entity manager jar,然后添加JTA Api作为依赖项,效果很好。

如果使用Hibernate 5.2.10.Final,应该更改

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

org.hibernate.jpa.HibernatePersistenceProvider
在persistence.xml中


根据

的说法,如果您使用的是Maven,那么您可能同时拥有两个
src/{main,test}/resources/META-INF/persistence.xml
。这是一个常见的设置:使用h2或Derby测试您的JPA代码,并使用PostgreSQL或其他一些完整的DBMS进行部署。如果使用此模式,请确保这两个文件具有不同的单元名称,否则
持久性
类的某些版本将尝试同时加载这两个文件(因为您的测试时类路径当然同时包含类和测试类);这将导致持久性单元的定义发生冲突,从而产生我们都非常讨厌的令人讨厌的消息


更糟糕的是:这可能在一些较旧版本(如Hibernate)中“起作用”,但在当前版本中失败。不管怎么说,这是值得的…

谢谢你的回答。但它仍然给出相同的错误信息。线程“main”javax.persistence.PersistenceException中出现异常:没有名为CustomerManager的EntityManager的持久性提供程序。感谢您的更新。正如他们在教程中所说,我在lib文件夹中添加了log4j.jar。初始化它的方法是什么?@MaRaVan您需要在类路径上放置一个
log4j.properties
。本教程提供了一个示例,同样适用于Eclipselink和其他JPA实现.Tnx。我把我的“persistence.xml”放错了位置。它解决了我的问题。
project/src/main/resources/META-INF/persistence.xml
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>