From d1c5e2c2deb76f6592f44bedd330c175aee25746 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 30 Jan 2019 09:58:37 +0100 Subject: [PATCH 1/2] DATAMONGO-2193 - Prepare issue branch. --- pom.xml | 2 +- spring-data-mongodb-benchmarks/pom.xml | 2 +- spring-data-mongodb-cross-store/pom.xml | 4 ++-- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) 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 From 6e0b75d1f8883e71f884a1164cead3a162669f7c Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 30 Jan 2019 09:49:48 +0100 Subject: [PATCH 2/2] DATAMONGO-2193 - Fix String <> ObjectId conversion for non id properties. We now make sure to only convert valid ObjectId Strings if the property can be considered as id property. --- .../mongodb/core/convert/QueryMapper.java | 7 +++-- .../data/mongodb/core/MongoTemplateTests.java | 31 +++++++++++++++++++ .../core/convert/QueryMapperUnitTests.java | 12 +++++++ 3 files changed, 48 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 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;