From 3bdeb6861739a86de24c301ca04ece4bb05c37b5 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 27 Sep 2011 10:43:02 +0200 Subject: [PATCH] DATADOC-278 - QueryMapper now converts ids for $ne correctly. --- .../data/mongodb/core/QueryMapper.java | 6 +++++- .../core/query/QueryMapperUnitTests.java | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) 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 b6463ead8..55410c015 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 @@ -60,7 +60,9 @@ public class QueryMapper { * @return */ public DBObject getMappedObject(DBObject query, MongoPersistentEntity entity) { + String idKey = null; + if (null != entity && entity.getIdProperty() != null) { idKey = entity.getIdProperty().getName(); } else if (query.containsField("id")) { @@ -87,7 +89,6 @@ public class QueryMapper { value = getMappedObject((DBObject) value, entity); } } else { - value = convertId(value); } newKey = "_id"; @@ -100,10 +101,13 @@ public class QueryMapper { newConditions.add(getMappedObject((DBObject) iter.next(), entity)); } value = newConditions; + } else if (key.equals("$ne")) { + value = convertId(value); } newDbo.put(newKey, value); } + return newDbo; } 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 d94a3dcf2..be0b3361e 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 @@ -15,7 +15,7 @@ */ package org.springframework.data.mongodb.core.query; -import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.math.BigInteger; @@ -89,6 +89,21 @@ public class QueryMapperUnitTests { assertThat(result.get("_id"), is((Object) "1")); } + /** + * @see DATADOC-278 + */ + @Test + public void translates$NeCorrectly() { + + Criteria criteria = Criteria.where("foo").ne(new ObjectId().toString()); + + DBObject result = mapper.getMappedObject(criteria.getCriteriaObject(), context.getPersistentEntity(Sample.class)); + Object object = result.get("_id"); + assertThat(object, is(DBObject.class)); + DBObject dbObject = (DBObject) object; + assertThat(dbObject.get("$ne"), is(ObjectId.class)); + } + class Sample { @Id