File tree 4 files changed +47
-1
lines changed
main/java/org/springframework/data/mongodb/core
test/java/org/springframework/data/mongodb/core
4 files changed +47
-1
lines changed Original file line number Diff line number Diff line change @@ -272,7 +272,7 @@ <T> MappedDocument prepareId(Class<T> type) {
272
272
*/
273
273
<T > MappedDocument prepareId (@ Nullable MongoPersistentEntity <T > entity ) {
274
274
275
- if (entity == null ) {
275
+ if (entity == null || source . hasId () ) {
276
276
return source ;
277
277
}
278
278
Original file line number Diff line number Diff line change @@ -3659,6 +3659,26 @@ public void saveAndLoadStringThatIsAnObjectIdAsString() {
3659
3659
assertThat (target ).isEqualTo (source );
3660
3660
}
3661
3661
3662
+ @ Test // GH-4184
3663
+ void insertHonorsExistingRawId () {
3664
+
3665
+ RawStringId source = new RawStringId ();
3666
+ source .id = "abc" ;
3667
+ source .value = "new value" ;
3668
+
3669
+ template .insert (source );
3670
+
3671
+ org .bson .Document result = template
3672
+ .execute (db -> db .getCollection (template .getCollectionName (RawStringId .class ))
3673
+ .find ().limit (1 ).cursor ().next ());
3674
+
3675
+ assertThat (result ).isNotNull ();
3676
+ assertThat (result .get ("_id" )).isEqualTo ("abc" );
3677
+
3678
+ RawStringId target = template .findOne (query (where ("id" ).is (source .id )), RawStringId .class );
3679
+ assertThat (target ).isEqualTo (source );
3680
+ }
3681
+
3662
3682
@ Test // GH-4026
3663
3683
void saveShouldGenerateNewIdOfTypeIfExplicitlyDefined () {
3664
3684
Original file line number Diff line number Diff line change @@ -205,6 +205,15 @@ void insertContextDoesNotAddConvertedIdForMongoIdTypesTargetingObjectId() {
205
205
});
206
206
}
207
207
208
+ @ Test // GH-4184
209
+ void insertContextDoesNotOverrideExistingId () {
210
+
211
+ assertThat (queryOperations .createInsertContext (new Document ("_id" , "abc" )).prepareId (Person .class ).getDocument ())//
212
+ .satisfies (result -> {
213
+ assertThat (result ).isEqualTo (new Document ("_id" , "abc" ));
214
+ });
215
+ }
216
+
208
217
static class Person {
209
218
210
219
}
Original file line number Diff line number Diff line change @@ -219,6 +219,23 @@ void insertShouldGenerateNewIdOfTypeIfExplicitlyDefined() {
219
219
}).verifyComplete ();
220
220
}
221
221
222
+ @ Test // GH-4184
223
+ void insertHonorsExistingRawId () {
224
+
225
+ MongoTemplateTests .RawStringId source = new MongoTemplateTests .RawStringId ();
226
+ source .id = "abc" ;
227
+ source .value = "new value" ;
228
+
229
+ template .insert (source )
230
+ .then (template .execute (db -> Flux .from (
231
+ db .getCollection (template .getCollectionName (MongoTemplateTests .RawStringId .class )).find ().limit (1 ).first ()))
232
+ .next ())
233
+ .as (StepVerifier ::create ).consumeNextWith (result -> {
234
+ assertThat (result ).isNotNull ();
235
+ assertThat (result .get ("_id" )).isEqualTo ("abc" );
236
+ });
237
+ }
238
+
222
239
@ Test // DATAMONGO-1444
223
240
void insertsSimpleEntityCorrectly () {
224
241
You can’t perform that action at this time.
0 commit comments