diff --git a/pom.xml b/pom.xml
index 6d016f49b8..9a47c77ac0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 2.1.5.BUILD-SNAPSHOT
+ 2.1.x.DATAMONGO-2193-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index fa9e0aa173..4980aef852 100644
--- a/spring-data-mongodb-benchmarks/pom.xml
+++ b/spring-data-mongodb-benchmarks/pom.xml
@@ -7,7 +7,7 @@
org.springframework.data
spring-data-mongodb-parent
- 2.1.5.BUILD-SNAPSHOT
+ 2.1.x.DATAMONGO-2193-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml
index ee60169059..6fa483e28a 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
- 2.1.5.BUILD-SNAPSHOT
+ 2.1.x.DATAMONGO-2193-SNAPSHOT
../pom.xml
@@ -50,7 +50,7 @@
org.springframework.data
spring-data-mongodb
- 2.1.5.BUILD-SNAPSHOT
+ 2.1.x.DATAMONGO-2193-SNAPSHOT
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 3e2bcef328..1207c6c75a 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
- 2.1.5.BUILD-SNAPSHOT
+ 2.1.x.DATAMONGO-2193-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index f63df5dc30..ae0a2b0313 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -11,7 +11,7 @@
org.springframework.data
spring-data-mongodb-parent
- 2.1.5.BUILD-SNAPSHOT
+ 2.1.x.DATAMONGO-2193-SNAPSHOT
../pom.xml
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 29ccd28a0b..b0b599614a 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
@@ -907,8 +907,11 @@ public MetadataBackedField with(String name) {
@Override
public boolean isIdField() {
- MongoPersistentProperty idProperty = (property != null && property.isIdProperty()) ? property
- : entity.getIdProperty();
+ if(property != null) {
+ return property.isIdProperty();
+ }
+
+ MongoPersistentProperty idProperty = entity.getIdProperty();
if (idProperty != null) {
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 d19b1d5567..1ece365f5c 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
@@ -234,6 +234,7 @@ protected void cleanDb() {
template.dropCollection(WithGeoJson.class);
template.dropCollection(DocumentWithNestedTypeHavingStringIdProperty.class);
template.dropCollection(ImmutableAudited.class);
+ template.dropCollection(Outer.class);
}
@Test
@@ -3663,6 +3664,24 @@ public void writesAuditingMetadataForImmutableTypes() {
assertThat(read.modified).isEqualTo(result.modified).describedAs("Expected auditing information to be read!");
}
+ @Test // DATAMONGO-2193
+ public void shouldNotConvertStringToObjectIdForNonIdField() {
+
+ ObjectId outerId = new ObjectId();
+ String innerId = new ObjectId().toHexString();
+
+ org.bson.Document source = new org.bson.Document() //
+ .append("_id", outerId) //
+ .append("inner", new org.bson.Document("id", innerId).append("value", "boooh"));
+
+ template.getDb().getCollection(template.getCollectionName(Outer.class)).insertOne(source);
+
+ Outer target = template.findOne(query(where("inner.id").is(innerId)), Outer.class);
+ assertThat(target).isNotNull();
+ assertThat(target.id).isEqualTo(outerId);
+ assertThat(target.inner.id).isEqualTo(innerId);
+ }
+
private AtomicReference createAfterSaveReference() {
AtomicReference saved = new AtomicReference<>();
@@ -4178,4 +4197,16 @@ static class ImmutableAudited {
@Id String id;
@LastModifiedDate Instant modified;
}
+
+ static class Outer {
+
+ @Id ObjectId id;
+ Inner inner;
+ }
+
+ static class Inner {
+
+ @Field("id") String id;
+ String value;
+ }
}
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 caaec117e0..2034e08051 100755
--- 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
@@ -819,6 +819,18 @@ public void getMappedObjectShouldNotMapTypeHint() {
assertThat(mappedObject).containsEntry("className", "foo");
}
+ @Test // DATAMONGO-2193
+ public void shouldNotConvertHexStringToObjectIdForRenamedNestedIdField() {
+
+ String idHex = new ObjectId().toHexString();
+ Query query = new Query(where("nested.id").is(idHex));
+
+ org.bson.Document document = mapper.getMappedObject(query.getQueryObject(),
+ context.getPersistentEntity(RootForClassWithExplicitlyRenamedIdField.class));
+
+ assertThat(document).isEqualTo(new org.bson.Document("nested.id", idHex));
+ }
+
@Document
public class Foo {
@Id private ObjectId id;