diff --git a/src/main/asciidoc/reference/mapping.adoc b/src/main/asciidoc/reference/mapping.adoc index 7cd2b17..3ae078e 100644 --- a/src/main/asciidoc/reference/mapping.adoc +++ b/src/main/asciidoc/reference/mapping.adoc @@ -180,9 +180,9 @@ public class PersonWriteConverter implements Converter { public OutboundRow convert(Person source) { OutboundRow row = new OutboundRow(); - row.put("_d", source.getId()); - row.put("name", source.getFirstName()); - row.put("age", source.getAge()); + row.put("_d", SettableValue.from(source.getId())); + row.put("name", SettableValue.from(source.getFirstName())); + row.put("age", SettableValue.from(source.getAge())); return row; } } diff --git a/src/main/java/org/springframework/data/r2dbc/convert/R2dbcCustomConversions.java b/src/main/java/org/springframework/data/r2dbc/convert/R2dbcCustomConversions.java index 1013a27..5831b25 100644 --- a/src/main/java/org/springframework/data/r2dbc/convert/R2dbcCustomConversions.java +++ b/src/main/java/org/springframework/data/r2dbc/convert/R2dbcCustomConversions.java @@ -40,7 +40,7 @@ public class R2dbcCustomConversions extends CustomConversions { * @param converters must not be {@literal null}. */ public R2dbcCustomConversions(Collection converters) { - super(STORE_CONVERSIONS, appendOverriddes(converters)); + super(STORE_CONVERSIONS, appendOverrides(converters)); } /** @@ -50,10 +50,10 @@ public class R2dbcCustomConversions extends CustomConversions { * @param converters must not be {@literal null}. */ public R2dbcCustomConversions(StoreConversions storeConversions, Collection converters) { - super(storeConversions, appendOverriddes(converters)); + super(storeConversions, appendOverrides(converters)); } - private static Collection appendOverriddes(Collection converters) { + private static Collection appendOverrides(Collection converters) { List objects = new ArrayList<>(converters); objects.addAll(R2dbcConverters.getOverrideConvertersToRegister()); diff --git a/src/main/java/org/springframework/data/r2dbc/core/DefaultReactiveDataAccessStrategy.java b/src/main/java/org/springframework/data/r2dbc/core/DefaultReactiveDataAccessStrategy.java index 5e135eb..3385f88 100644 --- a/src/main/java/org/springframework/data/r2dbc/core/DefaultReactiveDataAccessStrategy.java +++ b/src/main/java/org/springframework/data/r2dbc/core/DefaultReactiveDataAccessStrategy.java @@ -19,11 +19,13 @@ import io.r2dbc.spi.Row; import io.r2dbc.spi.RowMetadata; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; +import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.dao.InvalidDataAccessResourceUsageException; import org.springframework.data.convert.CustomConversions.StoreConversions; import org.springframework.data.mapping.context.MappingContext; @@ -37,9 +39,11 @@ import org.springframework.data.r2dbc.dialect.Dialect; import org.springframework.data.r2dbc.mapping.OutboundRow; import org.springframework.data.r2dbc.mapping.SettableValue; import org.springframework.data.r2dbc.query.UpdateMapper; +import org.springframework.data.relational.core.mapping.NamingStrategy; import org.springframework.data.relational.core.mapping.RelationalMappingContext; import org.springframework.data.relational.core.mapping.RelationalPersistentEntity; import org.springframework.data.relational.core.mapping.RelationalPersistentProperty; +import org.springframework.data.relational.core.mapping.Table; import org.springframework.data.relational.core.sql.Select; import org.springframework.data.relational.core.sql.render.NamingStrategies; import org.springframework.data.relational.core.sql.render.RenderContext; @@ -48,6 +52,7 @@ import org.springframework.data.relational.core.sql.render.SelectRenderContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; +import org.springframework.util.StringUtils; /** * Default {@link ReactiveDataAccessStrategy} implementation. @@ -63,21 +68,35 @@ public class DefaultReactiveDataAccessStrategy implements ReactiveDataAccessStra private final StatementMapper statementMapper; /** - * Creates a new {@link DefaultReactiveDataAccessStrategy} given {@link Dialect}. + * Creates a new {@link DefaultReactiveDataAccessStrategy} given {@link Dialect} and optional + * {@link org.springframework.core.convert.converter.Converter}s. * * @param dialect the {@link Dialect} to use. */ public DefaultReactiveDataAccessStrategy(Dialect dialect) { - this(dialect, createConverter(dialect)); + this(dialect, Collections.emptyList()); } - private static R2dbcConverter createConverter(Dialect dialect) { + /** + * Creates a new {@link DefaultReactiveDataAccessStrategy} given {@link Dialect} and optional + * {@link org.springframework.core.convert.converter.Converter}s. + * + * @param dialect the {@link Dialect} to use. + * @param converters custom converters to register, must not be {@literal null}. + * @see R2dbcCustomConversions + * @see org.springframework.core.convert.converter.Converter + */ + public DefaultReactiveDataAccessStrategy(Dialect dialect, Collection converters) { + this(dialect, createConverter(dialect, converters)); + } + + private static R2dbcConverter createConverter(Dialect dialect, Collection converters) { Assert.notNull(dialect, "Dialect must not be null"); + Assert.notNull(converters, "Converters must not be null"); R2dbcCustomConversions customConversions = new R2dbcCustomConversions( - StoreConversions.of(dialect.getSimpleTypeHolder(), R2dbcCustomConversions.STORE_CONVERTERS), - Collections.emptyList()); + StoreConversions.of(dialect.getSimpleTypeHolder(), R2dbcCustomConversions.STORE_CONVERTERS), converters); RelationalMappingContext context = new RelationalMappingContext(); context.setSimpleTypeHolder(customConversions.getSimpleTypeHolder());