【问题标题】:EclipseLink : No Persistence provider for EntityManager namedEclipseLink:没有命名的 EntityManager 的持久性提供程序
【发布时间】:2011-03-14 22:24:38
【问题描述】:

我想创建一个能够使用 Java Persistence 的 Bundle。为此,我在 Eclipse 中创建了一个插件项目。在我的项目中,我在 META-INF 中创建了一个 persistence.xml 文件。我还在我的 MANIFEST.mf(到依赖项)中添加了这 3 个包:

  1. javax.persistence.jar
  2. org.eclipse.persistence.jar
  3. org.eclipse.persistence.jar

然后,在我的 Activator 中,我使用这些行来创建一个 EntityManager :

factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 
EntityManager em = factory.createEntityManager();

为了执行我的捆绑包,我进行了产品配置。当我运行我的产品配置时,我收到了这个错误:

javax.persistence.PersistenceException: EntityManager 命名人员没有持久性提供程序

我试图移动我的persistence.xml 的位置但没有成功。似乎任何包都加载了persistence.xml 文件。也许,我没有导入正确的包?

你可以在这里下载我的简单包:download

你能帮我找到解决办法或线索吗?

【问题讨论】:

    标签: java jpa osgi eclipselink equinox


    【解决方案1】:

    我已经解决了我的问题。我只需要将这些包放入清单的类路径中: - 持久性.jar - eclipselink.jar - mysql-connector.jar

    谢谢

    【讨论】:

    • 我不确定我是否关注了您是否在这些 jar 文件中添加了清单?能再详细一点吗?
    【解决方案2】:

    尝试在persistence.xml中添加这个标签:

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

    【讨论】:

    • 谢谢,但我的 persistence.xml 文件中有这一行。其他解决方案?
    【解决方案3】:

    我在 Eclipse 中运行的一个简单项目中遇到了同样的错误。

    事实证明,将 META-INF 目录(包含 persistence.xml)添加到我的类路径是错误的做法。

    您必须在类路径上有其包含的目录(或 jar)。来自 EclipseLink 2.5.1 来源:

       /**
         * Search the classpath for persistence archives. A persistence archive is
         * defined as any part of the class path that contains a META-INF directory
         * with a persistence.xml file in it. Return a list of {@link Archive}
         * representing the root of those files. It is the caller's responsibility
         * to close all the archives.
         * 
         * @param loader the class loader to get the class path from
         */
        public static Set<Archive> findPersistenceArchives(ClassLoader loader){
            // allow alternate persistence location to be specified via system property.  This will allow persistence units
            // with alternate persistence xml locations to be weaved
            String descriptorLocation = System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
            return findPersistenceArchives(loader, descriptorLocation);
        }
    

    【讨论】:

      【解决方案4】:

      如果您在 Eclipse 中使用 Maven 运行您的应用程序,请右键单击 JPA 项目,选择“属性”,然后查看是否有“部署程序集”菜单项。如果是这样,请单击 Deployment assembly,单击 Add... 按钮,单击 Java Build Path Entries,然后选择 Maven Dependencies。确保 eclipselink.jar 在 Maven 依赖项中

      【讨论】:

        【解决方案5】:

        您似乎没有在 MANIFEST.MF 中使用 JPA-PersistenceUnits: 标头描述您的持久性单元。您可以在此处 (1) 找到有关 EclipseLink 的更多详细信息。

        (1):http://wiki.eclipse.org/Gemini/JPA/Documentation/CreatingAnApplication

        【讨论】:

        • 我已经解决了我的问题。我只需要在清单的类路径中放入这个包: - persistence.jar - eclipselink.jar - mysql-connector.jar 谢谢
        猜你喜欢
        • 1970-01-01
        • 2010-11-12
        • 2022-07-05
        • 1970-01-01
        • 2013-06-20
        • 1970-01-01
        相关资源
        最近更新 更多