File tree Expand file tree Collapse file tree 4 files changed +47
-1
lines changed
main/java/org/springframework/data/mongodb/core
test/java/org/springframework/data/mongodb/core Expand file tree Collapse file tree 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) {
272272 */
273273 <T > MappedDocument prepareId (@ Nullable MongoPersistentEntity <T > entity ) {
274274
275- if (entity == null ) {
275+ if (entity == null || source . hasId () ) {
276276 return source ;
277277 }
278278
Original file line number Diff line number Diff line change @@ -3636,6 +3636,26 @@ public void saveAndLoadStringThatIsAnObjectIdAsString() {
36363636 assertThat (target ).isEqualTo (source );
36373637 }
36383638
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+
36393659 @ Test // GH-4026
36403660 void saveShouldGenerateNewIdOfTypeIfExplicitlyDefined () {
36413661
Original file line number Diff line number Diff line change @@ -205,6 +205,15 @@ void insertContextDoesNotAddConvertedIdForMongoIdTypesTargetingObjectId() {
205205 });
206206 }
207207
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+
208217 static class Person {
209218
210219 }
Original file line number Diff line number Diff line change @@ -218,6 +218,23 @@ void insertShouldGenerateNewIdOfTypeIfExplicitlyDefined() {
218218 }).verifyComplete ();
219219 }
220220
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+
221238 @ Test // DATAMONGO-1444
222239 void insertsSimpleEntityCorrectly () {
223240
You can’t perform that action at this time.
0 commit comments