From fe8e57eaf532f6303fb3ef36ee030361891c6ef5 Mon Sep 17 00:00:00 2001
From: Julia <5765049+sxhinzvc@users.noreply.github.com>
Date: Mon, 28 Aug 2023 14:52:57 -0400
Subject: [PATCH 1/3] Prepare issue branch.
---
pom.xml | 2 +-
spring-data-mongodb-benchmarks/pom.xml | 2 +-
spring-data-mongodb-distribution/pom.xml | 2 +-
spring-data-mongodb/pom.xml | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/pom.xml b/pom.xml
index 366786fc6d..b9a1d8553c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4484-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index 2de4b6b635..10df658e85 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
- 4.2.0-SNAPSHOT
+ 4.2.x-4484-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 060a6d0dd9..dbeaf0a631 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4484-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index dc07f13ccc..18ab569ee4 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.2.0-SNAPSHOT
+ 4.2.x-4484-SNAPSHOT
../pom.xml
From 0f0d9c15732b19e92e8e86be1bb64b6d7cc7aa75 Mon Sep 17 00:00:00 2001
From: Julia <5765049+sxhinzvc@users.noreply.github.com>
Date: Mon, 28 Aug 2023 16:19:47 -0400
Subject: [PATCH 2/3] Fix `#self` @DocumentReference resolution when used in
constructor.
This commit enables document reference lookup to use `DocumentReferenceSource` to properly instantiate an entity containig a @DocumentReference `#self` property.
Closes #4484
---
.../core/convert/MappingMongoConverter.java | 5 +-
.../MongoTemplateDocumentReferenceTests.java | 62 +++++++++++++++++++
2 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
index 2bfb90150c..fdae00cc5a 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
@@ -1976,8 +1976,9 @@ public T getPropertyValue(MongoPersistentProperty property) {
}
if (property.isDocumentReference()) {
- return (T) dbRefResolver.resolveReference(property, accessor.get(property), referenceLookupDelegate,
- context::convert);
+ return (T) dbRefResolver.resolveReference(property,
+ new DocumentReferenceSource(accessor.getDocument(), accessor.get(property)),
+ referenceLookupDelegate, context::convert);
}
return super.getPropertyValue(property);
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateDocumentReferenceTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateDocumentReferenceTests.java
index 8693f027db..1bca7274b0 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateDocumentReferenceTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateDocumentReferenceTests.java
@@ -1265,6 +1265,32 @@ void readWriteTypeReferenceHavingFixedStringIdTargetType() {
.isEqualTo(new ObjectRefHavingStringIdTargetType(id.toHexString(), "me-the-referenced-object"));
}
+ @Test // GH-4484
+ void resolveReferenceForOneToManyLookupWithSelfVariableWhenUsedInCtorArgument() {
+
+ OneToManyStylePublisherWithRequiredArgsCtor publisher = new OneToManyStylePublisherWithRequiredArgsCtor("p-100", null);
+ template.save(publisher);
+
+ OneToManyStyleBook book1 = new OneToManyStyleBook();
+ book1.id = "id-1";
+ book1.publisherId = publisher.id;
+
+ OneToManyStyleBook book2 = new OneToManyStyleBook();
+ book2.id = "id-2";
+ book2.publisherId = "p-200";
+
+ OneToManyStyleBook book3 = new OneToManyStyleBook();
+ book3.id = "id-3";
+ book3.publisherId = publisher.id;
+
+ template.save(book1);
+ template.save(book2);
+ template.save(book3);
+
+ OneToManyStylePublisherWithRequiredArgsCtor target = template.findOne(query(where("id").is(publisher.id)), OneToManyStylePublisherWithRequiredArgsCtor.class);
+ assertThat(target.books).containsExactlyInAnyOrder(book1, book3);
+ }
+
static class SingleRefRoot {
String id;
@@ -2249,4 +2275,40 @@ public String toString() {
return "MongoTemplateDocumentReferenceTests.WithListOfRefs(id=" + this.getId() + ", refs=" + this.getRefs() + ")";
}
}
+
+ static class OneToManyStylePublisherWithRequiredArgsCtor {
+
+ @Id
+ String id;
+
+ @ReadOnlyProperty
+ @DocumentReference(lookup="{'publisherId':?#{#self._id} }")
+ List books;
+
+ public OneToManyStylePublisherWithRequiredArgsCtor(String id, List books) {
+ this.id = id;
+ this.books = books;
+ }
+
+ public String getId() {
+ return this.id;
+ }
+
+ public List getBooks() {
+ return this.books;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public void setBooks(List books) {
+ this.books = books;
+ }
+
+ public String toString() {
+ return "MongoTemplateDocumentReferenceTests.OneToManyStylePublisherWithRequiredArgsCtor(id=" + this.getId() + ", book="
+ + this.getBooks() + ")";
+ }
+ }
}
From 15154ad1d6b858b818c500ca6d6c2b877e460488 Mon Sep 17 00:00:00 2001
From: Julia <5765049+sxhinzvc@users.noreply.github.com>
Date: Tue, 29 Aug 2023 15:10:15 -0400
Subject: [PATCH 3/3] Polishing.
Add myself to list of authors.
Original Pull Request: #4486
---
.../data/mongodb/core/convert/MappingMongoConverter.java | 1 +
.../data/mongodb/core/MongoTemplateDocumentReferenceTests.java | 1 +
2 files changed, 2 insertions(+)
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
index fdae00cc5a..6aeb08e240 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
@@ -98,6 +98,7 @@
* @author Roman Puchkovskiy
* @author Heesu Jung
* @author Divya Srivastava
+ * @author Julia Lee
*/
public class MappingMongoConverter extends AbstractMongoConverter implements ApplicationContextAware {
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateDocumentReferenceTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateDocumentReferenceTests.java
index 1bca7274b0..c502533b37 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateDocumentReferenceTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateDocumentReferenceTests.java
@@ -57,6 +57,7 @@
* {@link DocumentReference} related integration tests for {@link MongoTemplate}.
*
* @author Christoph Strobl
+ * @author Julia Lee
*/
@ExtendWith(MongoClientExtension.class)
public class MongoTemplateDocumentReferenceTests {