Browse Source

Fix reading back id field value when multiple id property candidates exist.

We now check if a property identifies as the entities id property when populating values read from the source document.

Original pull request: #4878
Closes #4877
4.4.x
Christoph Strobl 11 months ago committed by Mark Paluch
parent
commit
1edbdcb383
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
  2. 21
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

2
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java

@ -134,7 +134,7 @@ public class MappingMongoConverter extends AbstractMongoConverter @@ -134,7 +134,7 @@ public class MappingMongoConverter extends AbstractMongoConverter
private static final BiPredicate<MongoPersistentEntity<?>, MongoPersistentProperty> PROPERTY_FILTER = (e,
property) -> {
if (property.isIdProperty()) {
if (e.isIdProperty(property)) {
return false;
}

21
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

@ -3313,6 +3313,21 @@ class MappingMongoConverterUnitTests { @@ -3313,6 +3313,21 @@ class MappingMongoConverterUnitTests {
.extracting("id").isEqualTo(idValue);
}
@Test // GH-4877
void shouldReadNonIdFieldCalledIdFromSource() {
WithRenamedIdPropertyAndAnotherPropertyNamedId source = new WithRenamedIdPropertyAndAnotherPropertyNamedId();
source.abc = "actual-id-value";
source.id = "just-a-field";
org.bson.Document document = write(source);
assertThat(document).containsEntry("_id", source.abc).containsEntry("id", source.id);
WithRenamedIdPropertyAndAnotherPropertyNamedId target = converter.read(WithRenamedIdPropertyAndAnotherPropertyNamedId.class, document);
assertThat(target.abc).isEqualTo(source.abc);
assertThat(target.id).isEqualTo(source.id);
}
org.bson.Document write(Object source) {
org.bson.Document target = new org.bson.Document();
@ -4531,4 +4546,10 @@ class MappingMongoConverterUnitTests { @@ -4531,4 +4546,10 @@ class MappingMongoConverterUnitTests {
}
}
static class WithRenamedIdPropertyAndAnotherPropertyNamedId {
@Id String abc;
String id;
}
}

Loading…
Cancel
Save