Spring Data MongoDB:无需@Query或父结果过滤的子列表查询方法
Spring Data JPA QueryMethod 实现嵌套集合条件查询
需求对应查询条件拆解
要实现的查询逻辑对应三个核心条件:
eventDn不等于传入的userDndocumentType匹配指定的枚举值subscriptions列表中至少有一个Subscription的subscribeDn等于userDn
最终QueryMethod写法
public List<EventChange> findByEventDnNotAndDocumentTypeAndActionAndSubscriptionsSubscribeDnEquals( String userDn, DocumentType documentType, Action action, String subscribeDn );
写法说明
EventDnNot:直接对应eventDn != userDn的不等条件DocumentType/Action:分别匹配实体类中对应字段的等值条件SubscriptionsSubscribeDnEquals:通过属性路径subscriptions.subscribeDn实现嵌套集合的条件查询,Spring Data JPA会自动解析为「检查subscriptions列表中是否存在至少一个元素满足subscribeDn等于传入值」的逻辑
使用注意
- 调用方法时,最后一个
subscribeDn参数直接传入同一个userDn值即可,因为需求中要求的就是订阅者DN等于当前用户DN - 确保实体类的字段名与QueryMethod中的属性路径严格一致(比如
EventChange的列表字段是subscriptions,Subscription的字段是subscribeDn) - 如果后续需要更复杂的嵌套条件,QueryMethod的可读性会下降,此时建议切换到
@Query注解手写JPQL实现
内容的提问来源于stack exchange,提问作者JavaJd
相关产品推荐
相关产品推荐

