Spring Boot 3.1.8自定义Querydsl仓库报错javax.persistence.NoResultException
问题分析与解决方案
核心原因
Spring Boot 3.x 基于 Jakarta EE 9+ 规范,原 javax.persistence 包下的类已全部迁移至 jakarta.persistence 包。你的代码或依赖的 Querydsl 版本中仍在引用 javax.persistence.NoResultException,导致运行时找不到该类。
具体解决步骤
替换包引用
检查自定义仓库实现类、查询逻辑代码中所有import javax.persistence.NoResultException;语句,替换为:import jakarta.persistence.NoResultException;同时排查其他
javax.persistence相关导入,统一替换为jakarta.persistence前缀。适配 Querydsl 版本
Spring Boot 3.1.8 需搭配 Querydsl 5.x 及以上版本(仅该版本支持 Jakarta Persistence)。检查你的build.gradle中 Querydsl 依赖版本,确保如下配置:dependencies { implementation 'com.querydsl:querydsl-jpa:5.0.0' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa' annotationProcessor 'jakarta.persistence:jakarta.persistence-api' annotationProcessor 'jakarta.annotation:jakarta.annotation-api' }清理构建缓存
执行 Gradle 清理构建命令,彻底清除旧编译文件:./gradlew clean build若使用 IntelliJ IDEA,同步后执行
File -> Invalidate Caches... -> Invalidate and Restart,避免 IDE 缓存干扰。验证查询逻辑
确认findAllDistinctHashtags的 Querydsl 实现未使用过时的 API,示例:public List<String> findAllDistinctHashtags() { return queryFactory.select(QArticle.article.hashtag) .from(QArticle.article) .distinct() .fetch(); }
内容的提问来源于stack exchange,提问作者Leti
相关产品推荐
相关产品推荐

