diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index 501d19f4d..db824db71 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -993,21 +993,30 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App } if (obj instanceof DBObject) { + DBObject newValueDbo = new BasicDBObject(); + for (String vk : ((DBObject) obj).keySet()) { + Object o = ((DBObject) obj).get(vk); newValueDbo.put(vk, convertToMongoType(o, typeHint)); } + return newValueDbo; } if (obj instanceof Map) { + Map converted = new LinkedHashMap(); - for (Map.Entry entry : ((Map) obj).entrySet()) { - converted.put(convertToMongoType(entry.getKey()), convertToMongoType(entry.getValue(), - typeHint != null && typeHint.getMapValueType() != null ? typeHint.getMapValueType() : typeHint)); + for (Entry entry : ((Map) obj).entrySet()) { + + TypeInformation valueTypeHint = typeHint != null && typeHint.getMapValueType() != null + ? typeHint.getMapValueType() : typeHint; + + converted.put(convertToMongoType(entry.getKey()), convertToMongoType(entry.getValue(), valueTypeHint)); } + return new BasicDBObject(converted); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java index f0ec0c22b..85eedd5a8 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java @@ -891,6 +891,7 @@ public class UpdateMapperUnitTests { * @see DATAMONGO-1423 */ @Test + @SuppressWarnings("unchecked") public void mappingShouldConsiderCustomConvertersForEnumMapKeys() { CustomConversions conversions = new CustomConversions(