You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data 2.6.1搭配Eclipselink与Jakarta 3使用是否可行?

问题解答

1. 可行性说明

你遇到的类找不到报错本质是Spring版本不匹配导致的命名空间兼容性问题:

  • 6.0版本以下的Spring Framework、3.0版本以下的Spring Boot/Spring Data JPA,底层全部基于javax.persistence命名空间开发,完全不支持jakarta.persistence命名空间,仅修改依赖版本无法解决问题,必须升级到对应支持Jakarta 3的版本才能兼容。
  • 如果你要使用Eclipselink 3.x + Jakarta Persistence 3.0,必须将Spring Boot版本升级到3.0及以上,对应Spring Data JPA版本同步升级到3.0及以上,该版本栈原生支持Jakarta EE 9+规范,且最低要求Java 17,和你当前使用的JDK版本完全匹配,不需要自行修改Spring Data JPA源码。
  • 如果你暂时没有升级Spring Boot大版本的计划,建议暂时沿用javax.persistence命名空间,使用Eclipselink 2.7.x版本即可正常运行。

2. 适配后的配置示例

Maven pom.xml核心配置

<project>
    <parent>
        <!-- 必须使用3.0+版本的Spring Boot -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.5</version>
        <relativePath/>
    </parent>
    <properties>
        <java.version>17</java.version>
        <jakarta-persistence.version>3.0.0</jakarta-persistence.version>
        <eclipselink.version>3.1.0</eclipselink.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <!-- 排除默认的Hibernate实现 -->
                <exclusion>
                    <groupId>org.hibernate.orm</groupId>
                    <artifactId>hibernate-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- Eclipselink 3.x依赖 -->
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>${eclipselink.version}</version>
        </dependency>
        <!-- Jakarta Persistence 3.0依赖,Spring Boot 3.x默认自带该依赖,如有版本要求可自行覆盖 -->
        <dependency>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
            <version>${jakarta-persistence.version}</version>
        </dependency>
    </dependencies>
</project>

JPA配置类示例

import jakarta.persistence.EntityManagerFactory;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class JpaConfig {
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource);
        em.setPackagesToScan("你的实体类包路径");
        EclipseLinkJpaVendorAdapter vendorAdapter = new EclipseLinkJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(false);
        vendorAdapter.setShowSql(true);
        em.setJpaVendorAdapter(vendorAdapter);
        Map<String, Object> properties = new HashMap<>();
        properties.put(PersistenceUnitProperties.WEAVING, "static");
        properties.put(PersistenceUnitProperties.DDL_GENERATION, "none");
        em.setJpaPropertyMap(properties);
        return em;
    }
    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

persistence.xml配置(放在resources/META-INF路径下

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="3.0"
             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">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>你的实体类全路径</class>
        <properties>
            <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="jakarta.persistence.jdbc.url" value="你的数据库连接地址"/>
            <property name="jakarta.persistence.jdbc.user" value="数据库用户名"/>
            <property name="jakarta.persistence.jdbc.password" value="数据库密码"/>
            <property name="eclipselink.ddl-generation" value="none"/>
            <property name="eclipselink.weaving" value="static"/>
        </properties>
    </persistence-unit>
</persistence>

内容的提问来源于stack exchange,提问作者D-FENS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:54:00