diff --git a/pom.xml b/pom.xml
index b1767cea66..f55717de3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-847-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml
index 854bef52cc..da58efc15a 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.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-847-SNAPSHOT
../pom.xml
@@ -48,7 +48,7 @@
org.springframework.data
spring-data-mongodb
- 1.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-847-SNAPSHOT
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 7302043a15..4911b883c6 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.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-847-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml
index 0415f6eb5e..27fe70dd37 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.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-847-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 6e84732769..25983880d0 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.5.0.BUILD-SNAPSHOT
+ 1.5.0.DATAMONGO-847-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/UpdateMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/UpdateMapper.java
index 21154de2a8..6e6e0fb512 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/UpdateMapper.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/UpdateMapper.java
@@ -25,6 +25,7 @@
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty;
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty.PropertyToFieldNameConverter;
+import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update.Modifier;
import org.springframework.data.mongodb.core.query.Update.Modifiers;
import org.springframework.data.util.ClassTypeInformation;
@@ -79,10 +80,19 @@ protected Entry getMappedObjectForField(Field field, Object rawV
return createMapEntry(field, convertSimpleOrDBObject(rawValue, field.getPropertyEntity()));
}
- if (!isUpdateModifier(rawValue)) {
- return super.getMappedObjectForField(field, getMappedValue(field, rawValue));
+ if (isQuery(rawValue)) {
+ return createMapEntry(field,
+ super.getMappedObject(((Query) rawValue).getQueryObject(), field.getPropertyEntity()));
}
+ if (isUpdateModifier(rawValue)) {
+ return getMappedUpdateModifier(field, rawValue);
+ }
+
+ return super.getMappedObjectForField(field, getMappedValue(field, rawValue));
+ }
+
+ private Entry getMappedUpdateModifier(Field field, Object rawValue) {
Object value = null;
if (rawValue instanceof Modifier) {
@@ -99,7 +109,6 @@ protected Entry getMappedObjectForField(Field field, Object rawV
value = modificationOperations;
} else {
-
throw new IllegalArgumentException(String.format("Unable to map value of type '%s'!", rawValue.getClass()));
}
@@ -119,6 +128,10 @@ private boolean isUpdateModifier(Object value) {
return value instanceof Modifier || value instanceof Modifiers;
}
+ private boolean isQuery(Object value) {
+ return value instanceof Query;
+ }
+
private DBObject getMappedValue(Modifier modifier) {
Object value = converter.convertToMongoType(modifier.getValue(), ClassTypeInformation.OBJECT);
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 170c3a7894..3ddf2526a3 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
@@ -41,10 +41,13 @@
import org.springframework.data.mongodb.core.DBObjectTestUtils;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
+import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DBObject;
import com.mongodb.DBRef;
@@ -471,6 +474,40 @@ public void updateOnDbrefPropertyOfInterfaceTypeWithoutExplicitGetterForIdShould
assertThat(model, allOf(instanceOf(DBRef.class), IsEqual.