Исключение при использовании Map в качестве свойства в bean-компоненте при использовании Spring Data MongoDB?

Я хотел бы сохранить свойство Map в своем компоненте и хочу, чтобы оно хранилось в MongoDB с использованием Spring Data Mongodb.

public class Sample {
   Map values;
   //constructor, getters and setters go here
}

Сохранение происходит нормально. Предположим, что я сохранил такой документ Mongo, используя этот bean-компонент:

{
  "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)

Как мы можем выйти из этого исключения?


person vivek_ganesan    schedule 24.07.2014    source источник


Ответы (2)


Мне пришлось изменить Map values; на Map<Object,Object> values;, и это заработало.

person vivek_ganesan    schedule 05.08.2014

попробуй это

    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();

если вы все еще сталкиваетесь с той же проблемой, попробуйте изменить значения имени, возможно, это похоже на зарезервированное слово.

person Ramzan Zafar    schedule 24.07.2014