没有名为xyz的entitymanager的持久性提供程序

时间:2016-08-03 11:20:14

标签: java hibernate maven

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

  

没有名为xyz

的entitymanager的持久性提供程序

为什么呢?我的 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项目中,上面的代码运行良好。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在我的案例中有不同的背景和解决方案:

上下文:

请参阅以下日志:

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之类的错误!