You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.1.8自定义Querydsl仓库报错javax.persistence.NoResultException

问题分析与解决方案

核心原因

Spring Boot 3.x 基于 Jakarta EE 9+ 规范,原 javax.persistence 包下的类已全部迁移至 jakarta.persistence 包。你的代码或依赖的 Querydsl 版本中仍在引用 javax.persistence.NoResultException,导致运行时找不到该类。

具体解决步骤

  1. 替换包引用
    检查自定义仓库实现类、查询逻辑代码中所有 import javax.persistence.NoResultException; 语句,替换为:

    import jakarta.persistence.NoResultException;
    

    同时排查其他 javax.persistence 相关导入,统一替换为 jakarta.persistence 前缀。

  2. 适配 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'
    }
    
  3. 清理构建缓存
    执行 Gradle 清理构建命令,彻底清除旧编译文件:

    ./gradlew clean build
    

    若使用 IntelliJ IDEA,同步后执行 File -> Invalidate Caches... -> Invalidate and Restart,避免 IDE 缓存干扰。

  4. 验证查询逻辑
    确认 findAllDistinctHashtags 的 Querydsl 实现未使用过时的 API,示例:

    public List<String> findAllDistinctHashtags() {
        return queryFactory.select(QArticle.article.hashtag)
                           .from(QArticle.article)
                           .distinct()
                           .fetch();
    }
    

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:32:36