Spring Data Repository中通过Label ID查询关联Note的方法
如何通过Label的ID查询所有关联的Note?
我定义了两个MongoDB实体类:
@Document("note") public class Note { // 其他字段... @DBRef(lazy = true) private List<Label> labels = new ArrayList<>(); } @Document("label") public class Label { @Id private String id; private String name; }
我尝试了以下查询但未生效:
@Query(value = "{ 'labels.$id': ?0) }", fields = "{'_id': 1}")
Slice findNotesByLabelName(String id, Pageable pageable);
解决方法
方法一:修正@Query语法并规范方法定义
你的查询语句里多了一个多余的右括号,导致MongoDB无法解析,同时方法名和参数含义不匹配,调整后如下:
@Query(value = "{ 'labels.$id': ?0 }", fields = "{'_id': 1}") Slice<Note> findNotesByLabelId(String labelId, Pageable pageable);
方法二:使用Spring Data派生查询(更简洁)
Spring Data MongoDB支持自动解析方法名生成查询,针对ListByLabelsId即可匹配Label的ID:
Slice<Note> findByLabelsId(String labelId, Pageable pageable);
原查询失效原因
- 原@Query的value中多了一个右括号
),导致查询语法错误; - 方法名
findNotesByLabelName暗示按Label的name字段查询,但参数传入的是ID,命名混淆也会影响Spring Data的解析逻辑。
内容的提问来源于stack exchange,提问作者Kzz xD
相关产品推荐
相关产品推荐

