当前位置: 首页 > 知识库问答 >
问题:

Eclipselink JPA 3.0和独立数据库的连接错误

冷善
2023-03-14

我被要求将大型独立Swing应用程序的数据库连接JAR从Eclipselink JPA 2.0迁移到Eclipselink JPA 3.0实现。

我看到一个很大的不同:Eclipselink 3.0使用雅加达。现在我所要做的就是连接到数据库,但到目前为止我一直没有成功,我不知道为什么。这是我的测试课:

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文件有问题,但我无法确定是什么。

这是我的坚持。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时发生异常。看起来像Eclipse Link尝试创建会话时。我还尝试使用Derby驱动程序做同样的事情,但结果相同。

欢迎任何帮助!

共有1个答案

壤驷兴朝
2023-03-14

我发现了问题。这是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>
 类似资料:
  • 在我的程序中,我正在访问wep api。最多可以有7个不同的线程访问web api的不同服务器。每个线程负责一个服务器,每个服务器速率限制每个线程。每个线程更新相同的mysql数据库。线程数保持不变。 在我的示例中,是否需要连接池?我不应该只打开7个不同的连接,这些连接将在程序的生命周期中打开吗?

  • 我的目标是为现有应用程序启用架构和数据迁移。 这种问题似乎已经被问过很多次了,不过我想是因为不同的要求和环境。 由于我在这个领域没有经验,请允许我先介绍一下应用程序的架构和我的假设。 该应用程序是一个多用户企业桌面应用程序,具有后端服务器,可以持久保存到任何主要数据库(MySql,Postgresql,SQL服务器,Oracle数据库等)。假设数据库是内部部署的,并由我们的客户维护。 使用的技术堆

  • 我正在尝试从kafka中的主题将数据插入postgres数据库。我正在使用以下命令加载 sink-quick start-MySQL . properties如下 我得到的错误是 Postgres jar文件已经在文件夹中。有人能提出建议吗?

  • 当使用ojdbc6.jar或ojdbc5.jar时,从独立java应用程序连接到Oracle12c将成功。 连接字符串: 而在通过Websphere进行连接时,相同的连接字符串将失败,出现以下异常。 java.SQL.sqlexception:ORA-28040:没有匹配的身份验证协议DSRA0010E:SQL状态=99999,错误代码=28,040 注意:已尝试和

  • 在下面的代码中,我有两个文件。一个用于数据库连接,另一个用于基于html的jsp文件。我正在尝试检查数据库的版本并将其打印到屏幕上。我正在尝试返回CheckVersion的值,并使用out.println将其放到网页上。 jasperException:PWC6033:JSP的Javac编译错误 PWC6199:生成的servlet错误:包com.sun.xml.rpc.processor.mod

  • 我正在使用CCDT文件连接到队列。