【问题标题】:EclipseLink "No Persistence provider for EntityManager named ..." exceptionEclipseLink“没有名为...的 EntityManager 的持久性提供程序”异常
【发布时间】:2022-07-05 02:02:01
【问题描述】:

我正在尝试创建一个简单的 Java 应用程序,使用 JPA 与 MySQL 数据库进行通信,它允许我将新行插入到数据库中找到的表中,检索其中的数据等。但是当我尝试运行它,我得到这个错误:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named default
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at com.lab9.Main.main(Main.java:9)

我知道这个问题已经在这里被问过几次了,但是没有一个旧线程对我有任何帮助。通常,人们似乎得到了这个例外,因为他们的persistence.xml 文件位于错误的目录中,或者因为他们忘记在所述文件中指定<provider>,这两种情况都不是我的情况。这是我在 IntelliJ 中的项目结构:

如您所见,我在src/main/resources/META-INF 中有persistence.xml,它应该在哪里。在这个文件中,我有这个:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
             version="3.0">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <class>com.lab9.Continent</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/cities"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value=""/>
        </properties>
    </persistence-unit>
</persistence>

最后,在我的pom.xml 文件中,我添加了这些依赖项:

<dependencies>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>3.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>javax.persistence</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
</dependencies>

我几乎尝试了所有方法:移动文件、添加和删除依赖项、从头开始重新编写整个程序,但似乎没有任何效果。

【问题讨论】:

  • 我的经验让我相信这个错误通常是因为类路径。 persistence.xml 文件本身在哪里:你能在你的 java 应用程序的 main 方法中加载它吗?您是否能够在其中加载 org.eclipse.persistence.jpa.PersistenceProvider 类(new PersistenceProvider())? wiki.eclipse.org/EclipseLink/Examples/JPA/Logging 显示了如何打开日志记录,但仅在 EclipseLink 尝试加载文件并抛出错误时才有帮助 - 您可能必须使用调试器来查看 Persistence 类正在加载的位置和内容以及它是否得到了远。

标签: java jpa eclipselink


【解决方案1】:

您使用基于 jakarta xsd (3.0) 的最新版本持久性 xml,但您使用 javax.persistence 连接到数据库。

你只需要使用: org.hibernate.jpa.HibernatePersistenceProvider ...

并在你的 pom.xml 中包含 folloin 工件

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>3.0.2</version>
 </dependency>

Or
      
 <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core-jakarta</artifactId>
    <version>5.6.9.Final</version>
 </dependency>   

希望对解决问题有所帮助

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2016-04-18
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多