我想在我的bean中存储一个Map属性,并希望它使用Spring Data Mongodb存储在MongoDB中。
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: [Assertion failed] - this argument is required; it must not be null
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.util.Assert.notNull(Assert.java:123)
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:69)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:290)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:274)
at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.getPath(QueryMapper.java:559)
at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.<init>(QueryMapper.java:486)
at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:104)
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1489)
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1480)
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:527)
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:518)
我们如何摆脱这种异常?
答案 0 :(得分:1)
我必须将Map values;
更改为Map<Object,Object> values;
,然后才开始工作。
答案 1 :(得分:0)
试试这个
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();
如果您仍面临同样的问题,请尝试更改名称值,因为这似乎是一个保留字。