【问题标题】:No Persistence provider for EntityManager named (Hibernate)没有名为(Hibernate)的 EntityManager 的持久性提供程序
【发布时间】:2015-07-01 09:34:36
【问题描述】:

我正在尝试运行一个基于 JPA 的示例项目。我总是从标题中得到错误。

我看过这里: No Persistence provider for EntityManager named

但没有找到可行的解决方案。

这是我的 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>~path.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>ejb3-persistence</artifactId>
            <version>3.3.2.Beta1</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.9.Final</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jst.server.generic</groupId>
            <artifactId>oc4j</artifactId>
            <version>1.5.105-v200709061325</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>4.0.1.Final</version>
            <classifier>tests</classifier>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>3.1.0.CR2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.4</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec</groupId>
            <artifactId>jboss-javaee-6.0</artifactId>
            <version>1.0.0.Final</version>
            <type>provided</type>
            <scope>pom</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.junit</groupId>
            <artifactId>arquillian-junit-container</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec</groupId>
            <artifactId>jboss-javaee-6.0</artifactId>
            <version>1.0.0.Final</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian.container</groupId>
            <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
            <version>1.0.0.CR3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.weld</groupId>
            <artifactId>weld-core</artifactId>
            <version>1.1.5.Final</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.6.4</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.arquillian</groupId>
                <artifactId>arquillian-bom</artifactId>
                <version>1.1.8.Final</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

我可能有一些我不需要的依赖项。由于我经验不足,我必须诚实承认,我非常绝望并寻找任何可能的答案,并且在此过程中我添加了一些可能根本不会使用的依赖项。

这是创建 EntityManager 的类

package ~path.examples.service;

import ~path.examples.testjpa.domain.Person;

import javax.persistence.*;

/**
 * Created by ME on 2015-04-22.
 */
public class JpaTest {
    public static void main(String args[]) {
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpaTest");
        EntityManager em = entityManagerFactory.createEntityManager();
        EntityTransaction userTransaction = em.getTransaction();

        userTransaction.begin();
        Person person = new Person();
        person.setFirstName("Charles");
        person.setSurname("Dickens");
        em.persist(person);
        userTransaction.commit();
        em.close();
        entityManagerFactory.close();
    }
}

还有:

  1. 我很确定所有文件都在适当的位置,我也遇到了一些问题,但我似乎已经消除了这个问题(比以前弹出的其他错误):)

  2. 我可能很明显遗漏了一些东西,提前感谢您的帮助!

edit:问题很可能出在persistance.xml文件中,所以在这里(感谢指出)。文件的位置是 src/main/resources/META-INF

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
             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">
    <persistence-unit name="JpaTest" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>~path.examples.testjpa.domain.Person</class>
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>

    </persistence-unit>
</persistence>

【问题讨论】:

  • 你有 persistence.xml 文件吗?
  • 假设是:它在哪里? “我很确定”不是隐藏细节的理由,因为您犯了错误的选项仍然存在。你自己这么说。
  • 是的,我当然有,我打算把它贴出来。已编辑,感谢您的指出,只是忘记了:) 顺便说一句,该位置几乎可以肯定是正确的(我必须承认我做了一些实验,在任何其他位置甚至都不会被检测到)但很可能有是文件中的错误,我没有看到。

标签: java hibernate maven jpa orm


【解决方案1】:

也许您没有将 Hibernate jar 添加到项目类路径中?缺少提供程序 jar(在本例中为 Hibernate)不会向您显示编译错误,因为它们在运行时是必需的。

【讨论】:

  • 我使用的是 maven,我添加了依赖项。现在我刚刚确认所有的罐子都在原位。
【解决方案2】:

你需要改变:

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

到:

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

【讨论】:

  • 我很抱歉这么说,但显然你错了。我只是通过将 更改为 来消除错误((显然是简单的拼写错误))这消除了先前的错误,但在行 userTransaction.begin() 中产生了一个新错误“应用程序必须提供 JDBC 连接”;当我尝试按照您所说的进行操作时,我又回到了上一个错误 :) 感谢您的尝试,我现在将感谢您对新错误的帮助
  • 是吗? How about this?
  • 我绝不会贬低你的帮助,因为它非常受欢迎,而且显然你对这个话题的了解比我多得多。我只是说会发生什么。按照你的建议做让我后退了一步,我刚刚通过纠正拼写错误消除了错误。
  • 旧的类已被弃用,它可能会在未来的版本中被删除。我会保留答案,因为它可能对其他人有帮助。
  • 既然遇到了新的错误,我是应该再开个话题,还是在这里等新的答案?
猜你喜欢
  • 2016-11-04
  • 2012-06-21
  • 1970-01-01
  • 2017-01-17
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 2016-04-18
相关资源
最近更新 更多