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

SpringBoot 2.7.4中CouchbaseRepository的@Query注解失效求助

解决方案

核心问题分析

Spring Boot 2.7.4 对应 Spring Data Couchbase 4.x 版本,该版本在API上有两处关键变化直接导致你的问题:

  1. CouchbasePagingAndSortingRepository 被整合进 CouchbaseRepository(后者已继承 PagingAndSortingRepository),无需单独继承
  2. Repository 层的 @Query 注解包路径变更,你当前导入的是核心查询类而非注解类,导致注解完全失效

分步解决

1. 修正@Query注解的导入包

将错误的导入:

import org.springframework.data.couchbase.core.query.Query;

替换为Repository层专属的注解导入:

import org.springframework.data.couchbase.repository.Query;

2. 移除冗余方法

CouchbaseRepository 已经内置了 findById()、save()、findAll() 等基础CRUD方法,无需在接口中重复定义,直接删除这些冗余代码。

3. 调整自定义查询(按需保留)

如果业务上确实需要过滤 modelName = 'AddLanguageRequest' 的数据,修改方法名避免与父接口的 findAll() 冲突,并确保N1QL语法正确:

@Query("#{#n1ql.selectEntity} WHERE modelName = 'AddLanguageRequest' AND #{#n1ql.filter}")
List<AddLanguageRequest> findAllByModelName();

其中 #{#n1ql.filter} 会自动添加实体类的类型过滤(基于 _class 字段),如果不需要可直接移除。

4. 恢复分页排序能力

CouchbaseRepository 已继承分页排序能力,直接使用父接口提供的方法即可:

Page<AddLanguageRequest> findAll(Pageable pageable);

完整修正后的代码

import com.flyaero.aeromasterapiservice.data.AddLanguageRequest;
import org.springframework.data.couchbase.core.query.N1qlPrimaryIndexed;
import org.springframework.data.couchbase.repository.CouchbaseRepository;
import org.springframework.data.couchbase.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@N1qlPrimaryIndexed
public interface LanguageRepository extends CouchbaseRepository<AddLanguageRequest, String> {

    // 按需保留自定义查询
    @Query("#{#n1ql.selectEntity} WHERE modelName = 'AddLanguageRequest' AND #{#n1ql.filter}")
    List<AddLanguageRequest> findAllByModelName();
}

额外注意事项

  • 检查实体类 AddLanguageRequest 上的 @Document、@Id 等注解是否符合Spring Data Couchbase 4.x规范
  • 确保项目中Couchbase客户端版本与Spring Boot 2.7.4依赖的3.x版本一致,避免依赖冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:05:53