【问题标题】:JPA No Persistence provider for EntityManagerJPA No Persistence provider for EntityManager
【发布时间】:2011-12-05 22:43:57
【问题描述】:

我知道关于这个主题还有其他一些问题,但没有一个答案有效。 我是 JPA 的新手,我使用 EclipseLink 作为实现,使用 Eclipse 作为 IDE。 这是我的persistence.xml(在 META-INF 文件夹中):

<?xml version="1.0" encoding="UTF-8" ?>
<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" xmlns="http://java.sun.com/xml/ns/persistence">

    <persistence-unit name="DBService" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

        <class>com.maze.model.EventModel</class>
        <class>com.maze.model.StoryModel</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mazedb;create=true" />
            <property name="javax.persistence.jdbc.user" value="user" />
            <property name="javax.persistence.jdbc.password" value="pass" />

            <!-- EclipseLink should create the database schema automatically -->
            <property name="eclipselink.ddl-generation" value="create-tables" />
            <property name="eclipselink.ddl-generation.output-mode" value="database" />
        </properties>
    </persistence-unit>

</persistence>

我在这里尝试获取一个 EntityManagerFactory

private EntityManagerFactory emf;
emf = Persistence.createEntityManagerFactory("DBService");

在运行时,我收到此错误: javax.persistence.PersistenceException: No Persistence provider for EntityManager named DBService

我已按照教程中的步骤进行操作,但没有结果...

编辑:我还将这些 jars 添加到 WEB-INF/lib 中:eclipselink.jar; javax.persistence_2.0.3.v201010191057.jar; mysql-connector-java-5.1.17-bin.jar,将 JPA 添加到 Project Facets 但还没有看到没有结果...

【问题讨论】:

  • 如何打包您的应用程序。它是您在应用程序服务器中运行的独立应用程序还是 *.war? persistence.xml 在您的目录结构中的确切位置是什么?
  • @PiotrNowicki 我正在使用适用于 Java EE 的 Eclipse IDE。我已经创建了一个动态 Web 项目,并且这个文件夹是自动创建的。
  • 所以如果你使用 *.war - 你的 persistence.xmlWEB-INF/classes/META-INF/persistence.xml 中吗?
  • 是的,现在我确定它应该在哪里。

标签: java jpa eclipselink


【解决方案1】:

将您的 persistence.xml 放在您的 war 文件的 META-INF 目录中。此外,将副本放在您的 lib 目录和 classes 目录中。

我在工作中使用eclipselink,使用一个包含我的实体类的独立jar包,一个带有persistence.xml的MET-INF目录,它工作正常。

您可能需要制作一个包含实体类的 jar 文件,外加一个 MET-INF/persistence.xml,然后将此 jar 文件添加到您的 lib 目录中,与 eclipselink.jar 一起。

要检查的另一件事是 RESOURCE-LOCAL,如果您在没有实体 bean 组件或独立应用程序的 web 应用程序中使用 JPA,则应该使用它。

【讨论】:

  • 我已将 JPA 添加到 Project Facets 中,所以现在它应该被重新识别。我什至在 src 中有一个 META-INF 文件夹。
  • 你使用的是什么 web 容器 tomcat?
  • 好的,我不知道 glassfish,但它可能是引擎盖下的雅加达 tomcat,所以没关系。我建议您将事情回归基础。
  • 好的,我不知道 glassfish,但它可能是引擎盖下的雅加达 tomcat,所以没关系。我建议你把事情回归基础。尝试使用一个 Entity 类和 META-INF/persistence.xml 的单个 jar 文件,删除persistence.xml 的其他“喷洒”,当您制作 jar 文件时,将其添加到您的 WEB-INF/lib 目录中,然后看看它是否有效,您还应该确保 WEB-INF/lib 文件夹还包含您所依赖的 java JPA jar 文件,它应该是容器 lib 的一部分,但只需将其添加到此处以确保它被拾取。
  • 是的,你是对的,这是persistence.xml的位置有问题,当我做对时,有一个命名问题(缺乏关注)。谢谢!
【解决方案2】:

你必须把你的persistence.xml放在META-INF中,并用小写字母写persistence.xml。

我想你写了第一个字母或一些大写字母,我也有这个错误。 你必须完全像这样写:persistence.xml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    相关资源
    最近更新 更多