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

MongoDB Repository中@Query查询int32字段无结果问题求解

问题分析

MongoDB是强类型数据库,你存储的sem.id是NumberInt(72)(int32类型),而Java中int/Long参数与该类型存在隐式不匹配,导致查询无结果但不报错。以下是保留int32类型的解决方法:


解决步骤

1. 对齐实体类字段类型

检查Score实体类中嵌套的sem对象,将id字段定义为Integer(而非Long),确保与MongoDB的int32类型映射一致:

public class Sem {
    private Integer id; // 对应MongoDB的NumberInt类型
    private String sem_number;
    
    // 省略getter、setter
}

public class Score {
    private String id;
    private Sem sem;
    private List<TestResult> testResults;
    private Double score;
    
    // 省略getter、setter
}

2. 调整Repository方法参数类型

将findBySemId的参数从int改为Integer,避免基本类型装箱带来的类型映射偏差:

@Repository
public interface ScoreRepository extends MongoRepository<Score, String> {

    @Query(value = "{ 'sem.id' : ?0 }")
    List<Score> findBySemId(final Integer semId);

}

3. 强制类型匹配(可选)

如果上述方法仍无效,可在@Query中使用MongoDB的$type操作符,明确指定匹配int32类型(BSON类型代码为3):

@Query(value = "{ 'sem.id' : { $eq: ?0, $type: 3 } }")
List<Score> findBySemId(final Integer semId);

4. 规范方法调用

调用查询方法时,传入Integer类型参数,避免传入Long或其他类型:

List<Score> scores = scoreRepository.findBySemId(72);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:23:26