Browse Source

#284 - Do not create PersistentEntity for UUID.

We now no longer create a PersistentEntity for UUID as UUID is a simple type and introspection on Java 9+ causes illegal access warnings.
pull/1188/head
Mark Paluch 6 years ago
parent
commit
00cc9120e6
No known key found for this signature in database
GPG Key ID: 51A00FA751B91849
  1. 9
      src/main/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContext.java
  2. 5
      src/main/java/org/springframework/data/r2dbc/mapping/R2dbcSimpleTypeHolder.java
  3. 33
      src/test/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContextUnitTests.java

9
src/main/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContext.java

@ -15,8 +15,10 @@ @@ -15,8 +15,10 @@
*/
package org.springframework.data.r2dbc.mapping;
import org.springframework.core.KotlinDetector;
import org.springframework.data.relational.core.mapping.NamingStrategy;
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
import org.springframework.data.util.KotlinReflectionUtils;
import org.springframework.data.util.TypeInformation;
/**
@ -46,6 +48,11 @@ public class R2dbcMappingContext extends RelationalMappingContext { @@ -46,6 +48,11 @@ public class R2dbcMappingContext extends RelationalMappingContext {
*/
@Override
protected boolean shouldCreatePersistentEntityFor(TypeInformation<?> type) {
return !R2dbcSimpleTypeHolder.HOLDER.isSimpleType(type.getType());
if (R2dbcSimpleTypeHolder.HOLDER.isSimpleType(type.getType())) {
return false;
}
return !KotlinDetector.isKotlinType(type.getType()) || KotlinReflectionUtils.isSupportedKotlinClass(type.getType());
}
}

5
src/main/java/org/springframework/data/r2dbc/mapping/R2dbcSimpleTypeHolder.java

@ -23,6 +23,7 @@ import java.util.Arrays; @@ -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 { @@ -36,8 +37,8 @@ public class R2dbcSimpleTypeHolder extends SimpleTypeHolder {
/**
* Set of R2DBC simple types.
*/
public static final Set<Class<?>> R2DBC_SIMPLE_TYPES = Collections
.unmodifiableSet(new HashSet<>(Arrays.asList(OutboundRow.class, Row.class, BigInteger.class, BigDecimal.class)));
public static final Set<Class<?>> 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();

33
src/test/java/org/springframework/data/r2dbc/mapping/R2dbcMappingContextUnitTests.java

@ -19,14 +19,21 @@ import static org.assertj.core.api.Assertions.*; @@ -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 { @@ -47,6 +54,27 @@ public class R2dbcMappingContextUnitTests {
assertThat(context.getPersistentEntity(ConvertedEntity.class)).isNotNull();
}
@Test // gh-284
public void shouldNotCreateEntityForUUID() {
R2dbcDialect dialect = PostgresDialect.INSTANCE;
List<Object> 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 { @@ -73,4 +101,9 @@ public class R2dbcMappingContextUnitTests {
return new ConvertedEntity();
}
}
static class MyEntity {
UUID id;
}
}

Loading…
Cancel
Save