Skip to content

UpdateMapper drops numeric keys in Maps #3552

Closed
@RamThirupathy

Description

@RamThirupathy

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

Metadata

Metadata

Labels

in: mappingMapping and conversion infrastructuretype: bugA general bug

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions