Java 在使用Spring Data MongoDB时,将Map用作bean中的属性时出现异常?

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" } } 现在,我想查询回这份文件。所以,我写

我想在我的bean中存储一个Map属性,并希望它使用Spring数据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:[断言失败]-此参数是必需的;它不能为空
位于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();