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

Loading…
Cancel
Save