jpa - Eclipselink JPA 3.0 和独立数据库的连接错误
问题描述
我被要求将大型独立 Swing 应用程序的数据库连接 jar 从 Eclipselink JPA 2.0 迁移到 Eclipselink JPA 3.0 实现。
我看到了一个很大的不同:Eclipselink 3.0 使用了 Jakarta。我现在要做的就是连接到数据库,但到目前为止我一直没有成功,我不知道为什么。这是我的测试课:
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
public class Main
{
public static void main( String[] argv )
{
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "FlexDB" );
EntityManager entityManager = emfactory.createEntityManager( );
entityManager.close();
emfactory.close();
System.out.println( "Hello World!" );
}
}
当我运行它时,我得到了这个异常。
Exception in thread "main" jakarta.persistence.PersistenceException: Exception [EclipseLink-4021]
(Eclipse Persistence Services - 3.0.0.v202012081010):
org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Unable to acquire a connection from driver [null], user [null] and URL [null].
Verify that you have set the expected driver class and URL. Check your login, persistence.xml or
sessions.xml resource. The jdbc.driver property should be set to a class that is compatible with
your database platform
异常告诉我我的 persistence.xml 或我正在使用的 jar 文件有问题,但我无法确定是什么。
这是我的persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="FlexDB" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value="" />
<property name="eclipselink.target-database"
value="org.eclipse.persistence.platform.database.H2Platform"/>
<property name="eclipselink.logging.level" value="INFO" />
</properties>
</persistence-unit>
</persistence>
这是我的依赖项(来自我的 pom.xml Maven 文件):
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jakarta.persistence/jakarta.persistence-api -->
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.0.0</version>
</dependency>
我在调试器中运行了连接代码,看起来persistence.xml 被找到并正确解析。创建实体管理器工厂的调用返回。当我尝试获取 EntityManager 时发生异常。看起来就像 EclipseLink 尝试创建会话时一样。我还尝试使用 Derby 驱动程序来做同样的事情,但结果相同。
非常欢迎任何帮助!
解决方案
我发现了问题。这是persistence.xml 文件。我通过将 persistence.xml 中的每个“javax”实例更改为“jakarta”来解决此问题。然后persistence.xml 变成了这个。eclipselink 站点上的文档中一定提到了更改,但我没有看到。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="FlexDB" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:h2:mem:"/>
<property name="jakarta.persistence.jdbc.password" value="sa"/>
<property name="jakarta.persistence.jdbc.user" value=""/>
<property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.H2Platform"/>
</properties>
</persistence-unit>
</persistence>
推荐阅读
- node.js - 如何在 nginx 上为反应应用程序设置代理通行证?
- ios - Xcode 中大约 100 个错误,未定义符号。在我的统一项目中
- google-cloud-sql - 如何从 Google App Maker 连接到 Google Cloud SQL 数据库作为外部 mysql 数据库?
- reactjs - React中的预增量运算符?
- django - 如何使用 heroku 将新的 pip 包添加到已部署的应用程序
- javascript - 输入值时,Knockout observable 错误地改变了数学计算的结果
- python - 如何根据坐标更新numpy数组
- stata - 不区分大小写地加载 Excel 文件表
- html - 在另一个矩形中创建一个矩形并定位元素
- django - 如何在 Django 中使用电子邮件登录?