Spring Boot 3迁移后无法访问javax.persistence.MappedSuperclass求助
Spring Boot 2 迁移到 3 后的编译错误解决方案
一、解决「无法访问javax.persistence.MappedSuperclass」问题
- 确认Spring Boot依赖版本完全切换到3.x:确保pom.xml中
spring-boot-starter-parent的版本是3.x系列,spring-boot-starter-data-jpa会自动引入Jakarta Persistence API(替代原javax.persistence),无需单独引入javax相关依赖。 - 排查依赖树中的javax残留:执行命令
mvn dependency:tree,找出仍依赖javax.persistence-api的第三方库,要么升级该库到支持Jakarta的版本,要么通过<exclusions>标签排除javax相关依赖。 - 全局检查导入语句:确保项目所有涉及JPA的类(实体、MappedSuperclass、Repository等)的导入均为
jakarta.persistence.*,不要遗漏任何文件(比如一些工具类、配置类里的导入)。
二、解决「MiscellaneousFeeDetails类找不到setRecordStatus等方法」问题
- 检查父类继承与方法权限:确认MiscellaneousFeeDetails正确继承了修改后的Jakarta版MappedSuperclass,且父类中
setRecordStatus、setUpdatedBy、setUpdateDate方法的访问修饰符为protected或public,保证子类可继承。 - 升级Lombok版本:若项目使用Lombok生成getter/setter,需将Lombok版本升级至1.18.24及以上(Spring Boot 3兼容版本),老版本Lombok对Jakarta注解的支持存在问题,会导致方法生成失败。
- 清理编译缓存:执行
mvn clean install清理项目编译产物,或在IDE中清理缓存(如IDEA:File -> Invalidate Caches...),避免旧编译文件残留导致的方法找不到问题。 - 校验方法名拼写:检查父类中方法名的拼写、大小写是否正确,确认子类调用的方法名与父类定义完全一致。
内容的提问来源于stack exchange,提问作者Lohit Akshay
相关产品推荐
相关产品推荐

