SpringBoot 2.7.4中CouchbaseRepository的@Query注解失效求助
解决方案
核心问题分析
Spring Boot 2.7.4 对应 Spring Data Couchbase 4.x 版本,该版本在API上有两处关键变化直接导致你的问题:
CouchbasePagingAndSortingRepository被整合进CouchbaseRepository(后者已继承PagingAndSortingRepository),无需单独继承- 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
相关产品推荐
相关产品推荐

