Browse Source

Recursively check embedded property loading.

Also, avoid falling back into hasValue(…) code path.

See #1676
Original pull request: #1685
pull/1713/head
Mark Paluch 2 years ago
parent
commit
a40dbc9f51
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 15
      spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java

15
spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java

@ -552,7 +552,7 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl @@ -552,7 +552,7 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl
RowDocumentAccessor source, RelationalPersistentProperty property,
RelationalPersistentEntity<?> persistentEntity) {
if (shouldReadEmbeddable(conversionContext, property, persistentEntity, provider, source)) {
if (shouldReadEmbeddable(conversionContext, property, persistentEntity, provider)) {
return read(conversionContext, persistentEntity, source);
}
@ -560,8 +560,7 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl @@ -560,8 +560,7 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl
}
private boolean shouldReadEmbeddable(ConversionContext context, RelationalPersistentProperty property,
RelationalPersistentEntity<?> unwrappedEntity, RelationalPropertyValueProvider propertyValueProvider,
RowDocumentAccessor source) {
RelationalPersistentEntity<?> unwrappedEntity, RelationalPropertyValueProvider propertyValueProvider) {
OnEmpty onEmpty = property.getRequiredAnnotation(Embedded.class).onEmpty();
@ -576,16 +575,14 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl @@ -576,16 +575,14 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl
if (persistentProperty.isEmbedded()) {
TypeInformation<?> typeInformation = persistentProperty.getTypeInformation();
RelationalPersistentEntity<?> nestedEntity = getMappingContext()
.getRequiredPersistentEntity(persistentProperty);
RelationalPersistentEntity<?> nestedEntity = getMappingContext().getPersistentEntity(typeInformation);
if (readEmbedded(nestedContext, contextual, source, persistentProperty, nestedEntity) != null) {
if (shouldReadEmbeddable(nestedContext, persistentProperty, nestedEntity, contextual)) {
return true;
}
}
if (contextual.hasValue(persistentProperty)) {
} else if (contextual.hasValue(persistentProperty)) {
return true;
}
}

Loading…
Cancel
Save