【问题标题】:Persistence Provider for EntityManager not found找不到 EntityManager 的持久性提供程序
【发布时间】:2013-04-07 10:25:56
【问题描述】:

我正在尝试使用 JPA 和 EclipseLink 来持久化元素。所以我创建了一个类来持久化

@Entity
public class Couple implements Serializable{
    private static final long serialVersionUID = 1L;
    @Column(name = "OBJECTID")
    private String objectID;
    @Column(name = "EPCNUMBER")
    private String epcNumber;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

等等。 我创建了一个类来“使用”它:

public class Main {
  private static final String PERSISTENCE_UNIT_NAME = "MyPU";
  private static EntityManagerFactory factory;

  public static void main(String[] args) {
    factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
    EntityManager em = factory.createEntityManager();
    TypedQuery<Couple> q = em.createQuery("SELECT c FROM Couple c", Couple.class);
    List<Couple> couples = (List<Couple>) q.getResultList();

然后,我有以下 persistence.xml :

<?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="MyPU">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>localJTA</jta-data-source>
        <class>fr.mypackage.com.Couple</class>
        <properties>
            <property name="eclipselink.ddl-generation" value="create-tables"/>
            <property name="eclipselink.ddl-generation.output-mode" value="database" />
            <property name="eclipselink.logging.level" value="INFO"/>
        </properties>
    </persistence-unit>
</persistence>

但是,即使我更改了属性,我也遇到了同样的错误:

线程“主”javax.persistence.PersistenceException 中的异常:没有名为 MyPU 的 EntityManager 的持久性提供程序 (调用 factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME); 时)。

我对 ling xml 和持久性单元做错了吗?我已经在类路径中添加了以下内容:

javax.persistence.jar
javax.ejb.jar
eclipselink.jar
javax.persistence_1.0.0.jar
javax.persistence_2.0.4.v201112161009.jar
derby.jar

你能帮我吗?谢谢!

【问题讨论】:

  • 你有太多persistence.jars,你应该选择。需要更多信息来找出找不到 eclipselink 提供程序的原因。您可以在主类中添加 eclipselink 依赖项以验证类路径是否包含它们。
  • 所以我删除了它们,我现在只有以下内容:javax.ejb.jar eclipselink.jar javax.persistence_2.0.4.v201112161009.jar derby.jar org.eclipse.persistence.jpa。 jpql_1.0.1.jar org.eclipse.persistence.jpa.modelgen.processor-2.3.2.jar 但我还是一样。如何检查类路径是否包含eclipslink依赖项?谢谢!
  • org.eclipse.persistence.jpa.jpql_1.0.1.jar jar 是从哪里来的?检查您是否拥有完整的 eclipselink.jar 并且没有重命名 OSGI 捆绑包之一 - 它应该有一个 META-INF\services\javax.persistence.spi.PersistenceProvider 文件,其中列出要在 中使用的提供程序类名称标签。还可以在获取持久性单元之前尝试在 main 方法中初始化一个 EclipseLink 类——如果你的类路径设置不正确,它会给你一个编译/运行时错误。类似新的 org.eclipse.persistence.platform.database.DatabaesPlatform()
  • 好的,我已经按照你说的做了,我添加了正确的罐子并删除了其他罐子。我还在我的主类中初始化了一个 AccessPlatform:没有错误。但我仍然没有持久性提供程序。我已经在 persistence.xml 中更改了 javax.persistence.spi.PersistenceProvider,我应该这样做吗?
  • 不,应该是“org.eclipse.persistence.jpa.PersistenceProvider”

标签: eclipse jakarta-ee eclipselink persistence.xml


【解决方案1】:

在我的应用程序中,我遇到了这个问题,直到我编译了我的 Netbeans 项目。然后就成功了。

【讨论】:

    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2012-06-21
    • 1970-01-01
    • 2017-01-17
    • 2011-05-14
    相关资源
    最近更新 更多