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 @@ -3636,6 +3636,26 @@ public void saveAndLoadStringThatIsAnObjectIdAsString() {
3636
3636
assertThat (target ).isEqualTo (source );
3637
3637
}
3638
3638
3639
+ @ Test // GH-4184
3640
+ void insertHonorsExistingRawId () {
3641
+
3642
+ RawStringId source = new RawStringId ();
3643
+ source .id = "abc" ;
3644
+ source .value = "new value" ;
3645
+
3646
+ template .insert (source );
3647
+
3648
+ org .bson .Document result = template
3649
+ .execute (db -> db .getCollection (template .getCollectionName (RawStringId .class ))
3650
+ .find ().limit (1 ).cursor ().next ());
3651
+
3652
+ assertThat (result ).isNotNull ();
3653
+ assertThat (result .get ("_id" )).isEqualTo ("abc" );
3654
+
3655
+ RawStringId target = template .findOne (query (where ("id" ).is (source .id )), RawStringId .class );
3656
+ assertThat (target ).isEqualTo (source );
3657
+ }
3658
+
3639
3659
@ Test // GH-4026
3640
3660
void saveShouldGenerateNewIdOfTypeIfExplicitlyDefined () {
3641
3661
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 @@ -218,6 +218,23 @@ void insertShouldGenerateNewIdOfTypeIfExplicitlyDefined() {
218
218
}).verifyComplete ();
219
219
}
220
220
221
+ @ Test // GH-4184
222
+ void insertHonorsExistingRawId () {
223
+
224
+ MongoTemplateTests .RawStringId source = new MongoTemplateTests .RawStringId ();
225
+ source .id = "abc" ;
226
+ source .value = "new value" ;
227
+
228
+ template .insert (source )
229
+ .then (template .execute (db -> Flux .from (
230
+ db .getCollection (template .getCollectionName (MongoTemplateTests .RawStringId .class )).find ().limit (1 ).first ()))
231
+ .next ())
232
+ .as (StepVerifier ::create ).consumeNextWith (result -> {
233
+ assertThat (result ).isNotNull ();
234
+ assertThat (result .get ("_id" )).isEqualTo ("abc" );
235
+ });
236
+ }
237
+
221
238
@ Test // DATAMONGO-1444
222
239
void insertsSimpleEntityCorrectly () {
223
240
You can’t perform that action at this time.
0 commit comments