From 28b18d25cbd50c4926793d69b0c649657500d044 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 5 Jun 2018 11:09:35 +0200 Subject: [PATCH] DATAMONGO-1988 - Polishing. Match exactly for either top-level properties of leaf-properties instead of accepting the property/field name suffix. Original pull request: #565. --- .../data/mongodb/core/convert/QueryMapper.java | 6 ++++-- .../mongodb/core/convert/QueryMapperUnitTests.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) 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 069c699d8..b70a00225 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 @@ -833,7 +833,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() { @@ -842,7 +842,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/convert/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java index dcc006b6b..deab04b21 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 @@ -783,6 +783,16 @@ public class QueryMapperUnitTests { assertThat(document.get("sample._id"), instanceOf(ObjectId.class)); } + @Test // DATAMONGO-1988 + public void matchesExactFieldNameToIdProperty() { + + Query query = query(where("sample.iid").is(new ObjectId().toHexString())); + org.bson.Document document = mapper.getMappedObject(query.getQueryObject(), + context.getPersistentEntity(ClassWithEmbedded.class)); + + assertThat(document.get("sample.iid"), instanceOf(String.class)); + } + @Test // DATAMONGO-1988 public void leavesNonObjectIdStringIdRepresentationUntouchedWhenReferencingIdProperty() {