diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/convert/MappingMongoConverter.java index f5311db19..f3cd2bb6b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/convert/MappingMongoConverter.java @@ -644,6 +644,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App } + @SuppressWarnings("unchecked") protected Object getValueInternal(MongoPersistentProperty prop, DBObject dbo, StandardEvaluationContext ctx, String spelExpr) { Object o; @@ -674,8 +675,10 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App // It's empty return Array.newInstance(prop.getComponentType(), 0); } else if (prop.isCollection() && sourceValue instanceof BasicDBList) { + BasicDBList dbObjList = (BasicDBList) sourceValue; - List items = new ArrayList(); + Collection items = CollectionFactory.createCollection(propertyType, dbObjList.size()); + for (int i = 0; i < dbObjList.size(); i++) { Object dbObjItem = dbObjList.get(i); if (dbObjItem instanceof DBRef) { @@ -686,11 +689,8 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App items.add(dbObjItem); } } - List itemsToReturn = new ArrayList(); - for (Object obj : items) { - itemsToReturn.add(obj); - } - return itemsToReturn; + + return items; } Class toType = findTypeToBeUsed((DBObject) sourceValue); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/convert/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/convert/MappingMongoConverterUnitTests.java index 590a5d1e8..900b606e6 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/convert/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/convert/MappingMongoConverterUnitTests.java @@ -29,6 +29,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; + import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; @@ -363,6 +365,20 @@ public class MappingMongoConverterUnitTests { assertThat(typedOuterString.size(), is(1)); } + /** + * @see DATADOC-192 + */ + @Test + public void readsEmptySetsCorrectly() { + + Person person = new Person(); + person.addresses = Collections.emptySet(); + + DBObject dbObject = new BasicDBObject(); + converter.write(person, dbObject); + converter.read(Person.class, dbObject); + } + class ClassWithEnumProperty { SampleEnum sampleEnum; @@ -386,6 +402,8 @@ public class MappingMongoConverterUnitTests { @Field("foo") String firstname; + + Set
addresses; } class ClassWithMapProperty {