Kotlin使用Spring Data MongoDB时addCriteria未解析引用报错
问题原因
你导入了错误的Query类。
你当前引入的org.springframework.data.mongodb.repository.Query是注解类,仅用于标记Repository接口的方法、定义固定字符串格式的查询规则,不能实例化后调用方法构造动态查询,自然不存在addCriteria方法。
addCriteria方法属于org.springframework.data.mongodb.core.query.Query,这才是用来动态构造MongoDB查询条件的实例类,和你参考的示例代码依赖的类完全一致。
正确实现代码
先导入正确的类,再构造查询即可:
// 正确导包 import org.springframework.data.mongodb.core.query.Criteria import org.springframework.data.mongodb.core.query.Query import org.springframework.data.mongodb.core.MongoTemplate // 构造查询 val query: Query = Query() query.addCriteria(Criteria.where("field1").exists(true)) // 多条件查询可以连续追加规则 query.addCriteria(Criteria.where("status").`is`(1)) // 配合MongoTemplate执行查询,替换为你自己的实体类即可 val resultList: List<YourDocumentEntity> = mongoTemplate.find(query, YourDocumentEntity::class.java)
两类Query的核心差异
org.springframework.data.mongodb.repository.Query:注解类型,无公开构造方法,只能写在Repository接口方法上,通过固定JSON字符串定义查询,适合查询逻辑固定的场景,示例:
interface UserRepository : MongoRepository<UserDoc, String> { // 注解式Query用法,不需要实例化 @org.springframework.data.mongodb.repository.Query("{ 'deleted': { \$ne: true } }") fun listAllValidUsers(): List<UserDoc> }
org.springframework.data.mongodb.core.query.Query:普通可实例化类,和MongoTemplate配合使用,支持动态拼接查询条件,addCriteria是它的内置方法,适合查询条件随入参动态变化的场景。
内容的提问来源于stack exchange,提问作者Laughing_Man
相关产品推荐
相关产品推荐

