Closed
Description
Numeric Bson Ids are dropped when using findAndModify method in org.springframework.data.mongodb.core.MongoTemplate.
Ex:
public class Foo {
private Map<String, String> map;
private Map<String, String> getMap() {
return map;
}
private void setMap(Map<String, String> map) {
this.map = map
}
}
@Test
public void test() {
Foo foo = new Foo();
mongoTemplate.save(foo);
Update update = new Update().set("map.601218778970110001827396", "testing");
druryIssue = mongoTemplate.findAndModify(new Query(Criteria.where("_id").is(foo.getId())), update,
new FindAndModifyOptions().returnNew(true), Foo.class);
System.out.println(druryIssue.map);
}
Foo is saved us
{
"_id" : ObjectId("6023ff93defc2460cc3c4a26"),
"_class" : "com.test.Foo",
"map" : "testing"//it should have been "map.601218778970110001827396":"testing"
}
and resulting in exception
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [java.util.Map<?, ?>]
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:324)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:206)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:187)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getPotentiallyConvertedSimpleRead(MappingMongoConverter.java:838)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1230)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.access$200(MappingMongoConverter.java:84)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:1176)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getValueInternal(MappingMongoConverter.java:886)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$1.doWithPersistentProperty(MappingMongoConverter.java:290)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$1.doWithPersistentProperty(MappingMongoConverter.java:278)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:331)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:278)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:238)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:198)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:194)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:84)
at org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:2306)
at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1907)
at org.springframework.data.mongodb.core.MongoTemplate.doFindAndModify(MongoTemplate.java:1839)
at org.springframework.data.mongodb.core.MongoTemplate.findAndModify(MongoTemplate.java:715)
at org.springframework.data.mongodb.core.MongoTemplate.findAndModify(MongoTemplate.java:710)
Note: This is working when we directly using Java Mongo driver instead of spring-data-mongodb.
spring-data-mongodb version is: 1.10.18.RELEASE