Spring Data JPA未包含javax.persistence?Maven依赖问题咨询
其实你碰到的这个问题挺常见的,咱们一步步把它理清楚:
为什么只引入 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




