You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Data JPA未包含javax.persistence?Maven依赖问题咨询

问题解答:Spring Data JPA 与 javax.persistence 依赖的关系

其实你碰到的这个问题挺常见的,咱们一步步把它理清楚:

为什么只引入 spring-data-jpa 找不到 javax.persistence.* 类?

spring-data-jpa 本质是Spring提供的JPA数据访问抽象层,它的定位是帮你简化JPA的使用,但本身并不包含JPA的核心API规范(也就是javax.persistence相关类)。它的设计逻辑是依赖于外部的JPA API或者JPA实现框架,所以默认不会自动引入这些类的依赖——这就是你找不到相关类的根本原因。

有没有包含 javax.persistence 的Spring相关依赖?

严格来说,Spring官方并没有单独推出一个包含javax.persistence的依赖包,毕竟JPA是Java EE(后来的Jakarta EE)的规范,而非Spring自己定义的标准。不过有几种比手动引入javax.persistence-api更优雅的解决方案:

1. 用Spring Boot Starter(Spring Boot项目优先选这个)

如果你是Spring Boot项目,直接引入spring-boot-starter-data-jpa就足够了。这个starter会自动帮你传递引入JPA API、默认的JPA实现(Hibernate)等所有必要依赖,完全不用手动加javax.persistence-api

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <!-- 无需指定版本,Spring Boot父工程会统一管理依赖版本 -->
</dependency>

2. 引入JPA实现框架(非Spring Boot项目)

如果不是Spring Boot项目,除了spring-data-jpa,你可以直接引入一个JPA实现框架(比如Hibernate),它会自动包含JPA API的依赖,不用单独加javax.persistence-api

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.10.Final</version> <!-- 和spring-data-jpa 2.2.x版本兼容 -->
</dependency>

这样不仅解决了类找不到的问题,还能直接使用JPA实现框架的完整功能。

关于javax.persistence-api版本的小补充

你提到这个依赖最后更新是2017年,这是因为JPA 2.2是Java EE时代的最后一个版本,之后Java EE被移交到Eclipse基金会,改名为Jakarta EE,对应的API包也从javax.persistence变成了jakarta.persistence。如果是新项目,更推荐使用Jakarta EE版本的依赖:

<dependency>
    <groupId>jakarta.persistence</groupId>
    <artifactId>jakarta.persistence-api</artifactId>
    <version>3.1.0</version>
</dependency>

不过要注意,这个版本需要搭配支持Jakarta EE的Spring Data JPA版本(比如3.0及以上)。

总结一下:Spring Data JPA本身不包含JPA API,你可以根据项目类型,选择Spring Boot Starter、引入JPA实现框架,或者直接引入JPA API依赖来解决问题~

内容的提问来源于stack exchange,提问作者en Lopes

火山引擎 最新活动