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
相关产品推荐
相关产品推荐

