使用PanacheMongoRepository查询多列返回null,可能原因是什么?
MongoDB多列查询返回null的排查方向
以下是几种可能导致查询返回null的原因:
查询方法使用错误
Quarkus MongoDB Panache的find()方法返回的是PanacheQuery对象,并非直接返回文档。如果要获取单个文档,需要链式调用singleResult()或firstResult()方法,比如:find("countryCode = ?1 and languageId = ?2", "USA", "EN").singleResult()若仅调用
find()而不执行结果获取方法,会得到查询对象而非预期文档,可能被误判为null。字段或值的大小写不匹配
MongoDB是区分大小写的:- 检查实体类中的字段名(如
countryCode、languageId)是否与数据库文档中的字段名完全一致,比如数据库中是CountryCode或LanguageID就会匹配失败; - 确认参数值的大小写是否与数据库中的值一致,比如数据库中语言ID是
en而非EN,也会导致查询无结果。
- 检查实体类中的字段名(如
集合映射错误
检查实体类对应的集合是否正确:- 默认情况下,MongoDB Panache会将实体类名转为小写复数作为集合名(如
CountryLanguage对应countrylanguages); - 若数据库中的集合名与默认映射不符,且未通过
@MongoCollection注解指定正确集合名,会导致查询错集合,自然返回null。
- 默认情况下,MongoDB Panache会将实体类名转为小写复数作为集合名(如
查询语法验证
虽然and在Panache查询语法中是支持的,但可以尝试改用MongoDB原生查询文档格式验证,排除语法解析异常:find("{countryCode: ?1, languageId: ?2}", "USA", "EN").singleResult()
内容的提问来源于stack exchange,提问作者Dev1ce
相关产品推荐
相关产品推荐

