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

Spring Boot查询MongoDB嵌入文档遇StackOverflowException问题求助

问题排查与解决方法

可能的原因及对应解决方案

1. 实体类双向循环引用

如果Settlement实体类中存在指向ZipCode的反向引用(比如@DBRef或普通对象引用),即使findAll能正常返回,执行特定查询时Jackson序列化/反序列化过程会触发无限递归,最终导致StackOverflowException。

解决步骤:

  • 检查Settlement类,移除不必要的反向引用(MongoDB嵌入结构不需要双向关联);
  • 若必须保留引用,在该字段上添加@JsonIgnore或@JsonBackReference注解,打断序列化循环。

2. 派生查询路径不明确

municipality是嵌入在settlements数组中的字段,默认的getByMunicipality派生查询无法正确识别字段路径,导致Spring Data MongoDB内部解析查询逻辑时出现递归栈溢出。

解决步骤:

  • 使用明确的路径派生查询方法名:
List<ZipCode> getBySettlementsMunicipality(String municipality);
  • 或者手动用@Query指定查询条件(更可靠):
@Query("{ 'settlements.municipality' : ?0 }")
List<ZipCode> findByMunicipality(String municipality);

3. Spring Data MongoDB版本bug

部分旧版本的Spring Data MongoDB在处理嵌入数组的派生查询时存在递归解析bug,会触发栈溢出。

解决步骤:

  • 将Spring Data MongoDB依赖升级到最新稳定版本(需匹配对应Spring Boot版本)。

验证方法

先通过MongoDB Compass手动执行查询db.zipcodes.find({ 'settlements.municipality': '目标城市名' }),确认数据存在且查询正常,再测试Spring Boot中的查询方法,排除数据本身的问题。

内容的提问来源于stack exchange,提问作者Jetto Martínez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:33:28