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() {