diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java index a1fafec56..1b932e951 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java @@ -771,7 +771,7 @@ public class QueryMapper { /* * (non-Javadoc) - * @see org.springframework.data.mongodb.core.convert.QueryMapper.Field#isIdKey() + * @see org.springframework.data.mongodb.core.convert.QueryMapper.Field#isIdField() */ @Override public boolean isIdField() { @@ -780,7 +780,9 @@ public class QueryMapper { : entity.getIdProperty(); if (idProperty != null) { - return name.endsWith(idProperty.getName()) || name.endsWith(idProperty.getFieldName()); + + return name.equals(idProperty.getName()) || name.equals(idProperty.getFieldName()) + || name.endsWith("." + idProperty.getName()) || name.endsWith("." + idProperty.getFieldName()); } return DEFAULT_ID_NAMES.contains(name); 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 16740e54b..a38ef705e 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 @@ -3251,10 +3251,10 @@ public class MongoTemplateTests { template.save(source); - DocumentWithNestedTypeHavingStringIdProperty target = template.query(DocumentWithNestedTypeHavingStringIdProperty.class) - .matching(query(where("sample.id").is(source.sample.id))).firstValue(); + DocumentWithNestedTypeHavingStringIdProperty target = template + .findOne(query(where("sample.id").is(source.sample.id)), DocumentWithNestedTypeHavingStringIdProperty.class); - assertThat(target).isEqualTo(source); + assertThat(target, is(source)); } static class TypeWithNumbers { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java index 542d558b9..07353d7e1 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java @@ -65,7 +65,7 @@ import com.mongodb.QueryBuilder; /** * Unit tests for {@link QueryMapper}. - * + * * @author Oliver Gierke * @author Patryk Wasik * @author Thomas Darimont @@ -762,20 +762,30 @@ public class QueryMapperUnitTests { public void mapsStringObjectIdRepresentationToObjectIdWhenReferencingIdProperty() { Query query = query(where("sample.foo").is(new ObjectId().toHexString())); - org.bson.Document document = mapper.getMappedObject(query.getQueryObject(), + DBObject dbo = mapper.getMappedObject(query.getQueryObject(), context.getPersistentEntity(ClassWithEmbedded.class)); - assertThat(document.get("sample._id"), instanceOf(ObjectId.class)); + assertThat(dbo.get("sample._id"), instanceOf(ObjectId.class)); + } + + @Test // DATAMONGO-1988 + public void matchesExactFieldNameToIdProperty() { + + Query query = query(where("sample.iid").is(new ObjectId().toHexString())); + DBObject dbo = mapper.getMappedObject(query.getQueryObject(), + context.getPersistentEntity(ClassWithEmbedded.class)); + + assertThat(dbo.get("sample.iid"), instanceOf(String.class)); } @Test // DATAMONGO-1988 public void leavesNonObjectIdStringIdRepresentationUntouchedWhenReferencingIdProperty() { Query query = query(where("sample.foo").is("id-1")); - org.bson.Document document = mapper.getMappedObject(query.getQueryObject(), + DBObject dbo = mapper.getMappedObject(query.getQueryObject(), context.getPersistentEntity(ClassWithEmbedded.class)); - assertThat(document.get("sample._id"), instanceOf(String.class)); + assertThat(dbo.get("sample._id"), instanceOf(String.class)); } @Document