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 extends Object> 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;
}