From a40dbc9f511548014756f58caa0720fd58866098 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 5 Dec 2023 10:57:29 +0100 Subject: [PATCH] Recursively check embedded property loading. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, avoid falling back into hasValue(…) code path. See #1676 Original pull request: #1685 --- .../conversion/MappingRelationalConverter.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java index 39747e0c7..bae5f0512 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java +++ b/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, 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 } 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 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; } }