【发布时间】: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