diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryMapper.java index a90896b2c..559a607df 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/QueryMapper.java @@ -89,9 +89,9 @@ public class QueryMapper { newKey = "_id"; } else if (key.startsWith("$") && key.endsWith("or")) { // $or/$nor - BasicBSONList conditions = (BasicBSONList) value; + Iterable conditions = (Iterable) value; BasicBSONList newConditions = new BasicBSONList(); - Iterator iter = conditions.iterator(); + Iterator iter = conditions.iterator(); while (iter.hasNext()) { newConditions.add(getMappedObject((DBObject) iter.next(), entity)); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryMapperUnitTests.java index 760b9defe..e432637a6 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryMapperUnitTests.java @@ -21,6 +21,7 @@ import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Query.*; import java.math.BigInteger; +import java.util.Arrays; import org.bson.types.ObjectId; import org.junit.Before; @@ -38,6 +39,7 @@ import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; +import com.mongodb.QueryBuilder; /** * Unit tests for {@link QueryMapper}. @@ -160,6 +162,16 @@ public class QueryMapperUnitTests { assertThat(list.get(0).toString(), is(Enum.INSTANCE.name())); } + /** + * @see DATAMONGO-373 + */ + @Test + public void handlesNativelyBuiltQueryCorrectly() { + + DBObject query = new QueryBuilder().or(new BasicDBObject("foo", "bar")).get(); + mapper.getMappedObject(query, null); + } + class Sample { @Id