【问题标题】:No persistence provider for entitymanager named xyz没有名为 xyz 的实体管理器的持久性提供程序
【发布时间】:2016-08-03 11:20:14
【问题描述】:

我在 IntelliJ 中有一个 JavaFX Maven 项目,它使用 Hibernate。当应用程序启动时,我收到以下错误消息:

没有名为 xyz 的实体管理器的持久性提供程序

为什么?我的 META-INF/persistence.xml 位于 myproject/src/main/resources 中(该目录在项目设置中被检查为资源文件夹)。 我确定我已经通过 Maven 下载了所有 Hibernate JAR。

我的 persistence.xml 是正确的:

<?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
      <persistence-unit name="xyz">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>entity.User</class>
        <properties>
          <property name="hibernate.dialect" value="org.hibernate.dialect.SQLiteDialect"/>
          <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:java.sqlite"/>
          <property name="javax.persistence.jdbc.driver_class" value="oracle.jdbc.driver"/>
          <property name="hibernate.hbm2ddl.auto" value="none"/>
          <property name="hibernate.show_sql" value="false"/>
          <property name="javax.persistence.schema-generation.database.action" value="create"/>
        </properties>
      </persistence-unit>
    </persistence>

Java 代码:

factory = Persistence.createEntityManagerFactory("xyz");

在我的一个旧的非 Maven 项目中,上面的代码运行良好。

【问题讨论】:

  • 你检查你的构建工件了吗?它是否包含 persistence.xml 并位于正确的位置?
  • 只需在 META-INF 中重命名 WEB-INF 就可以了
  • 这是我写问题时的错误。该文件夹名为 META-INF 而不是 WEB-INF。
  • 如果您使用的是 Hibernate 5.2,请尝试&lt;provider&gt;org.hibernate.jpa.HibernatePersistenceProvider&lt;/provider&gt;
  • Ejb.hibernatepersistence 已弃用

标签: java hibernate maven


【解决方案1】:

您的 persistence.xml 必须位于 META-INF 文件夹中

【讨论】:

  • 这是我写问题时的错误。该文件夹名为 META-INF 而不是 WEB-INF。
【解决方案2】:

我的情况有不同的背景和解决方案:

上下文:

查看下面的日志:

org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test]
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=sa}
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
...
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named NewPersistenceUnit`

解决方案:

从上面的日志中可以清楚地看出,persistenceUnit 已经找到,并且提取了一些数据,如方言、用户名和密码。

实体映射出现问题。通过在实体上一一注释掉@Entity,我能够找到问题并解决它,而persistence.xml文件没有任何变化。

我不知道为什么实体映射出现问题时应该显示No Persistence provider for EntityManager named X 之类的错误!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 2015-11-08
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多