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 @@ -3659,6 +3659,26 @@ public void saveAndLoadStringThatIsAnObjectIdAsString() {
36593659 assertThat (target ).isEqualTo (source );
36603660 }
36613661
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+
36623682 @ Test // GH-4026
36633683 void saveShouldGenerateNewIdOfTypeIfExplicitlyDefined () {
36643684
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 @@ -219,6 +219,23 @@ void insertShouldGenerateNewIdOfTypeIfExplicitlyDefined() {
219219 }).verifyComplete ();
220220 }
221221
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+
222239 @ Test // DATAMONGO-1444
223240 void insertsSimpleEntityCorrectly () {
224241
You can’t perform that action at this time.
0 commit comments