From 68082ba55a9951a3ddbdf1ffe38042ba6ce16acb Mon Sep 17 00:00:00 2001 From: Christoph Strobl <christoph.strobl@broadcom.com> Date: Fri, 11 Apr 2025 10:48:23 +0200 Subject: [PATCH 1/2] Prepare issue branch --- pom.xml | 2 +- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 8887800fc3..4055142cec 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb-parent</artifactId> - <version>4.5.0-SNAPSHOT</version> + <version>4.5.0-GH-4944-SNAPSHOT</version> <packaging>pom</packaging> <name>Spring Data MongoDB</name> diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 58c63dfc97..71f5fc494d 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -15,7 +15,7 @@ <parent> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb-parent</artifactId> - <version>4.5.0-SNAPSHOT</version> + <version>4.5.0-GH-4944-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 37e68c6f78..40e9dd359f 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -13,7 +13,7 @@ <parent> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb-parent</artifactId> - <version>4.5.0-SNAPSHOT</version> + <version>4.5.0-GH-4944-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> From c00fae23c5c501a4f9e4244dfc59bb633266be21 Mon Sep 17 00:00:00 2001 From: Christoph Strobl <christoph.strobl@broadcom.com> Date: Fri, 11 Apr 2025 11:25:32 +0200 Subject: [PATCH 2/2] Fix MongoId mapping for insertAll. This commit fixes an issue where id properties annotated with MongoId had not been converted into the desired target type when inserting a collection of objects instead a single one. Resolves: #4944 --- .../data/mongodb/core/MongoTemplate.java | 5 ++++- .../data/mongodb/core/MongoTemplateTests.java | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index 67ef3a3081..fd547c61a0 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -1433,7 +1433,10 @@ protected <T> Collection<T> doInsertBatch(String collectionName, Collection<? ex maybeEmitEvent(new BeforeSaveEvent<>(initialized, document, collectionName)); initialized = maybeCallBeforeSave(initialized, document, collectionName); - documentList.add(document); + MappedDocument mappedDocument = queryOperations.createInsertContext(MappedDocument.of(document)) + .prepareId(uninitialized.getClass()); + + documentList.add(mappedDocument.getDocument()); initializedBatchToSave.add(initialized); } 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 83d4e30cc5..6aaec4011e 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 @@ -34,6 +34,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import org.bson.Document; import org.bson.types.ObjectId; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; @@ -3110,6 +3111,18 @@ public void generatesIdForInsertAll() { assertThat(jesse.getId()).isNotNull(); } + @Test // GH-4944 + public void insertAllShouldConvertIdToTargetTypeBeforeSave() { + + RawStringId walter = new RawStringId(); + walter.value = "walter"; + + RawStringId returned = template.insertAll(List.of(walter)).iterator().next(); + org.bson.Document document = template.execute(RawStringId.class, collection -> collection.find().first()); + + assertThat(returned.id).isEqualTo(document.get("_id")); + } + @Test // DATAMONGO-1208 public void takesSortIntoAccountWhenStreaming() {