diff --git a/pom.xml b/pom.xml index dfb64f9ba3..b346be895b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1509-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index ae0a5d6c8f..0a390d12d8 100644 --- a/spring-data-mongodb-cross-store/pom.xml +++ b/spring-data-mongodb-cross-store/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1509-SNAPSHOT ../pom.xml @@ -48,7 +48,7 @@ org.springframework.data spring-data-mongodb - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1509-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 2d02722262..cb0f01f4f5 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1509-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml index ee5e3336db..e7876043f5 100644 --- a/spring-data-mongodb-log4j/pom.xml +++ b/spring-data-mongodb-log4j/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1509-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 8072d3f665..18f5ad90ce 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1509-SNAPSHOT ../pom.xml 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 344170d9ab..979802235f 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 @@ -348,17 +348,19 @@ public void write(final Object obj, final DBObject dbo) { return; } - Class entityType = obj.getClass(); + Class entityType = ClassUtils.getUserClass(obj.getClass()); + boolean handledByCustomConverter = conversions.getCustomWriteTarget(entityType, DBObject.class) != null; TypeInformation type = ClassTypeInformation.from(entityType); - if (!handledByCustomConverter && !(dbo instanceof BasicDBList)) { - typeMapper.writeType(type, dbo); - } Object target = obj instanceof LazyLoadingProxy ? ((LazyLoadingProxy) obj).getTarget() : obj; writeInternal(target, dbo, type); + + if (!handledByCustomConverter && !(dbo instanceof BasicDBList)) { + typeMapper.writeType(type, dbo); + } } /** @@ -516,12 +518,13 @@ protected void writePropertyInternal(Object obj, DBObject dbo, MongoPersistentPr Object existingValue = accessor.get(prop); BasicDBObject propDbObj = existingValue instanceof BasicDBObject ? (BasicDBObject) existingValue : new BasicDBObject(); - addCustomTypeKeyIfNecessary(ClassTypeInformation.from(prop.getRawType()), obj, propDbObj); + MongoPersistentEntity entity = isSubtype(prop.getType(), obj.getClass()) ? mappingContext.getPersistentEntity(obj.getClass()) : mappingContext.getPersistentEntity(type); writeInternal(obj, propDbObj, entity); + addCustomTypeKeyIfNecessary(ClassTypeInformation.from(prop.getRawType()), obj, propDbObj); accessor.put(prop, propDbObj); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java index 385b501ec6..d08444bd46 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java @@ -43,6 +43,7 @@ import org.joda.time.DateTime; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -3470,6 +3471,22 @@ public void onBeforeSave(BeforeSaveEvent event) { assertThat(document.id, is(notNullValue())); } + + /** + * @see DATAMONGO-1509 + */ + @Test + public void findsByGnericNestedListElements() { + + List modelList = Arrays.asList(new ModelA("value")); + DocumentWithCollection dwc = new DocumentWithCollection(modelList); + + template.insert(dwc); + + Query query = query(where("models").is(modelList)); + assertThat(template.findOne(query, DocumentWithCollection.class), is(equalTo(dwc))); + } + static class TypeWithNumbers { @Id String id; @@ -3549,6 +3566,7 @@ static class DocumentWithDBRefCollection { @org.springframework.data.mongodb.core.mapping.DBRef(lazy = true) public Map lazyDbRefAnnotatedMap; } + @EqualsAndHashCode static class DocumentWithCollection { @Id String id; @@ -3601,6 +3619,7 @@ static interface Model { String id(); } + @EqualsAndHashCode static class ModelA implements Model { @Id String id; @@ -3835,7 +3854,7 @@ static class WithGeoJson { @Id String id; @Version // - Integer version; + Integer version; String description; GeoJsonPoint point; }