Browse Source

Preserve class keyword as Map key during update mapping.

This commit makes sure to skip the class property ob Object when mapping maps and their keys inside an Update.

Closes #3566
Original pull request: #3577.
pull/3581/head
Christoph Strobl 5 years ago committed by Mark Paluch
parent
commit
52b13ccf58
No known key found for this signature in database
GPG Key ID: 4406B84C1661DCD1
  1. 3
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java
  2. 11
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java

3
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java

@ -1220,7 +1220,8 @@ public class QueryMapper {
private boolean isPathToJavaLangClassProperty(PropertyPath path) { private boolean isPathToJavaLangClassProperty(PropertyPath path) {
if (path.getType().equals(Class.class) && path.getLeafProperty().getOwningType().getType().equals(Class.class)) { if ((path.getType() == Class.class || path.getType().equals(Object.class))
&& path.getLeafProperty().getType() == Class.class) {
return true; return true;
} }
return false; return false;

11
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java

@ -1180,6 +1180,17 @@ class UpdateMapperUnitTests {
.isEqualTo("{\"$set\": {\"map.601218778970110001827396.value\": \"testing\"}}"); .isEqualTo("{\"$set\": {\"map.601218778970110001827396.value\": \"testing\"}}");
} }
@Test // GH-3566
void mapsObjectClassPropertyFieldInMapValueTypeAsKey() {
Update update = new Update().set("map.class", "value");
Document mappedUpdate = mapper.getMappedObject(update.getUpdateObject(),
context.getPersistentEntity(EntityWithObjectMap.class));
assertThat(mappedUpdate)
.isEqualTo("{\"$set\": {\"map.class\": \"value\"}}");
}
static class DomainTypeWrappingConcreteyTypeHavingListOfInterfaceTypeAttributes { static class DomainTypeWrappingConcreteyTypeHavingListOfInterfaceTypeAttributes {
ListModelWrapper concreteTypeWithListAttributeOfInterfaceType; ListModelWrapper concreteTypeWithListAttributeOfInterfaceType;
} }

Loading…
Cancel
Save