diff --git a/src/main/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContext.java b/src/main/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContext.java index f5c53ea..a0dd52e 100644 --- a/src/main/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContext.java +++ b/src/main/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContext.java @@ -17,6 +17,7 @@ package org.springframework.data.r2dbc.mapping; import org.springframework.data.relational.core.mapping.NamingStrategy; import org.springframework.data.relational.core.mapping.RelationalMappingContext; +import org.springframework.data.util.ReflectionUtils; import org.springframework.data.util.TypeInformation; /** @@ -40,12 +41,17 @@ public class R2dbcMappingContext extends RelationalMappingContext { super(namingStrategy); } - /* + /* * (non-Javadoc) * @see org.springframework.data.mapping.context.AbstractMappingContext#shouldCreatePersistentEntityFor(org.springframework.data.util.TypeInformation) */ @Override protected boolean shouldCreatePersistentEntityFor(TypeInformation type) { - return !R2dbcSimpleTypeHolder.HOLDER.isSimpleType(type.getType()); + + if (R2dbcSimpleTypeHolder.HOLDER.isSimpleType(type.getType())) { + return false; + } + + return !ReflectionUtils.isKotlinClass(type.getType()) || ReflectionUtils.isSupportedKotlinClass(type.getType()); } } diff --git a/src/main/java/org/springframework/data/r2dbc/mapping/R2dbcSimpleTypeHolder.java b/src/main/java/org/springframework/data/r2dbc/mapping/R2dbcSimpleTypeHolder.java index f5bb32e..5ff71c1 100644 --- a/src/main/java/org/springframework/data/r2dbc/mapping/R2dbcSimpleTypeHolder.java +++ b/src/main/java/org/springframework/data/r2dbc/mapping/R2dbcSimpleTypeHolder.java @@ -23,6 +23,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; +import java.util.UUID; import org.springframework.data.mapping.model.SimpleTypeHolder; @@ -36,8 +37,8 @@ public class R2dbcSimpleTypeHolder extends SimpleTypeHolder { /** * Set of R2DBC simple types. */ - public static final Set> R2DBC_SIMPLE_TYPES = Collections - .unmodifiableSet(new HashSet<>(Arrays.asList(OutboundRow.class, Row.class, BigInteger.class, BigDecimal.class))); + public static final Set> R2DBC_SIMPLE_TYPES = Collections.unmodifiableSet( + new HashSet<>(Arrays.asList(OutboundRow.class, Row.class, BigInteger.class, BigDecimal.class, UUID.class))); public static final SimpleTypeHolder HOLDER = new R2dbcSimpleTypeHolder(); diff --git a/src/test/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContextUnitTests.java b/src/test/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContextUnitTests.java index f9c3713..df7032d 100644 --- a/src/test/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContextUnitTests.java +++ b/src/test/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContextUnitTests.java @@ -19,14 +19,21 @@ import static org.assertj.core.api.Assertions.*; import io.r2dbc.spi.Row; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; import org.junit.Test; import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.CustomConversions; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.convert.WritingConverter; import org.springframework.data.r2dbc.convert.R2dbcCustomConversions; +import org.springframework.data.r2dbc.dialect.PostgresDialect; +import org.springframework.data.r2dbc.dialect.R2dbcDialect; /** * Unit tests for {@link R2dbcMappingContext}. @@ -47,6 +54,27 @@ public class R2dbcMappingContextUnitTests { assertThat(context.getPersistentEntity(ConvertedEntity.class)).isNotNull(); } + @Test // gh-284 + public void shouldNotCreateEntityForUUID() { + + R2dbcDialect dialect = PostgresDialect.INSTANCE; + + List converters = new ArrayList<>(dialect.getConverters()); + converters.addAll(R2dbcCustomConversions.STORE_CONVERTERS); + + CustomConversions.StoreConversions storeConversions = CustomConversions.StoreConversions + .of(dialect.getSimpleTypeHolder(), converters); + + R2dbcCustomConversions conversions = new R2dbcCustomConversions(storeConversions, Collections.emptyList()); + + R2dbcMappingContext context = new R2dbcMappingContext(); + context.setSimpleTypeHolder(conversions.getSimpleTypeHolder()); + context.afterPropertiesSet(); + + assertThat(context.getPersistentEntity(MyEntity.class)).isNotNull(); + assertThat(context.getPersistentEntity(UUID.class)).isNull(); + } + static class ConvertedEntity { } @@ -73,4 +101,9 @@ public class R2dbcMappingContextUnitTests { return new ConvertedEntity(); } } + + static class MyEntity { + + UUID id; + } }