Java 在使用Spring Data MongoDB时,将Map用作bean中的属性时出现异常?
我想在我的bean中存储一个Map属性,并希望它使用Spring数据MongoDB存储在MongoDB中Java 在使用Spring Data MongoDB时,将Map用作bean中的属性时出现异常?,java,spring,mongodb,spring-data,spring-data-mongodb,Java,Spring,Mongodb,Spring Data,Spring Data Mongodb,我想在我的bean中存储一个Map属性,并希望它使用Spring数据MongoDB存储在MongoDB中 public class Sample { Map values; //constructor, getters and setters go here } 储蓄发生得很好。假设我使用以下bean保存了一个Mongo文档: { "values": { "id":123, "name":"Vivek" } } 现在,我想查询回这份文件。所以,我写
public class Sample {
Map values;
//constructor, getters and setters go here
}
储蓄发生得很好。假设我使用以下bean保存了一个Mongo文档:
{
"values": {
"id":123,
"name":"Vivek"
}
}
现在,我想查询回这份文件。所以,我写了这样的东西:
Query.addCriteria(Criteria.where("values.id").is(123));
这会导致执行find()
时出现异常
java.lang.IllegalArgumentException:[断言失败]-此参数是必需的;它不能为空
位于org.springframework.util.Assert.notNull(Assert.java:112)
位于org.springframework.util.Assert.notNull(Assert.java:123)
位于org.springframework.data.mapping.PropertyPath.(PropertyPath.java:69)
位于org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)
位于org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)
位于org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:290)
位于org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:274)
位于org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.getPath(QueryMapper.java:559)
位于org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField。(QueryMapper.java:486)
位于org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:104)
位于org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1489)
位于org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1480)
位于org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:527)
位于org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:518)
我们怎样才能摆脱这个异常呢?试试这个
Query query = new Query(Criteria.where("values._id").is(id));
query.fields().include("values.$");
Sample sample= mongoTemplate.findOne(query, Sample.class,"sample");
Map values= sample.getValues();
如果您仍然面临相同的问题,请尝试更改名称值,因为这看起来可能是一个保留字。我必须更改
映射值代码>到映射值代码>和它开始工作
Query query = new Query(Criteria.where("values._id").is(id));
query.fields().include("values.$");
Sample sample= mongoTemplate.findOne(query, Sample.class,"sample");
Map values= sample.getValues();