From 9e8e3ce64e3647dc9704cba0ebf523bbd70a85bf Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 15 May 2024 08:32:49 +0200 Subject: [PATCH] Move AggregateReference converter registration into MappingJdbcConverter. See #1750 Original pull request: #1785 --- .../core/convert/JdbcCustomConversions.java | 33 ++----------------- .../core/convert/MappingJdbcConverter.java | 14 +++++++- .../MappingRelationalConverter.java | 1 - 3 files changed, 16 insertions(+), 32 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcCustomConversions.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcCustomConversions.java index f6d8a768..50167ad4 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcCustomConversions.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcCustomConversions.java @@ -39,18 +39,8 @@ import org.springframework.data.jdbc.core.mapping.JdbcSimpleTypes; */ public class JdbcCustomConversions extends CustomConversions { - private static final Collection STORE_CONVERTERS; - - static { - - List converters = new ArrayList<>(Jsr310TimestampBasedConverters.getConvertersToRegister()); - - converters - .addAll(AggregateReferenceConverters.getConvertersToRegister(DefaultConversionService.getSharedInstance())); - - STORE_CONVERTERS = Collections.unmodifiableCollection(converters); - - } + private static final Collection STORE_CONVERTERS = Collections + .unmodifiableCollection(Jsr310TimestampBasedConverters.getConvertersToRegister()); /** * Creates an empty {@link JdbcCustomConversions} object. @@ -66,7 +56,6 @@ public class JdbcCustomConversions extends CustomConversions { * @param converters must not be {@literal null}. */ public JdbcCustomConversions(List converters) { - super(constructConverterConfiguration(converters)); } @@ -98,29 +87,13 @@ public class JdbcCustomConversions extends CustomConversions { private static ConverterConfiguration constructConverterConfiguration(List converters) { - StoreConversions storeConversions = storeConversions(converters); - return new ConverterConfiguration( // - storeConversions, // + StoreConversions.of(JdbcSimpleTypes.HOLDER, STORE_CONVERTERS), // converters, // JdbcCustomConversions::excludeConversionsBetweenDateAndJsr310Types // ); } - private static StoreConversions storeConversions(List userConverters) { - - List converters = new ArrayList<>(Jsr310TimestampBasedConverters.getConvertersToRegister()); - - DefaultConversionService defaultConversionService = new DefaultConversionService(); - for (Object userConverter : userConverters) { - if (userConverter instanceof Converter converter) - defaultConversionService.addConverter(converter); - } - - converters.addAll(AggregateReferenceConverters.getConvertersToRegister(defaultConversionService)); - - return StoreConversions.of(JdbcSimpleTypes.HOLDER, Collections.unmodifiableCollection(converters)); - } /** * Obtain a read only copy of default store converters. diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java index 5b14cc07..6286d48a 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java @@ -29,6 +29,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContextAware; import org.springframework.core.convert.ConverterNotFoundException; import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.converter.ConverterRegistry; import org.springframework.data.convert.CustomConversions; import org.springframework.data.jdbc.core.mapping.AggregateReference; import org.springframework.data.jdbc.core.mapping.JdbcValue; @@ -91,6 +92,8 @@ public class MappingJdbcConverter extends MappingRelationalConverter implements this.typeFactory = JdbcTypeFactory.unsupported(); this.relationResolver = relationResolver; + + registerAggregateReferenceConverters(); } /** @@ -110,6 +113,14 @@ public class MappingJdbcConverter extends MappingRelationalConverter implements this.typeFactory = typeFactory; this.relationResolver = relationResolver; + + registerAggregateReferenceConverters(); + } + + private void registerAggregateReferenceConverters() { + + ConverterRegistry registry = (ConverterRegistry) getConversionService(); + AggregateReferenceConverters.getConvertersToRegister(getConversionService()).forEach(registry::addConverter); } @Nullable @@ -327,7 +338,8 @@ public class MappingJdbcConverter extends MappingRelationalConverter implements this.accessor = accessor; this.context = context; this.identifier = path.isEntity() - ? potentiallyAppendIdentifier(identifier, path.getRequiredLeafEntity(), property -> delegate.getValue(path.append(property))) + ? potentiallyAppendIdentifier(identifier, path.getRequiredLeafEntity(), + property -> delegate.getValue(path.append(property))) : identifier; } 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 2967205d..e5f21596 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 @@ -120,7 +120,6 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl this.spELContext = new SpELContext(DocumentPropertyAccessor.INSTANCE); this.introspector = createIntrospector(projectionFactory, getConversions(), getMappingContext()); - } private static EntityProjectionIntrospector createIntrospector(ProjectionFactory projectionFactory,