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 @@
*/ */
package org.springframework.data.r2dbc.mapping; 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.NamingStrategy;
import org.springframework.data.relational.core.mapping.RelationalMappingContext; import org.springframework.data.relational.core.mapping.RelationalMappingContext;
import org.springframework.data.util.KotlinReflectionUtils;
import org.springframework.data.util.TypeInformation; import org.springframework.data.util.TypeInformation;
/** /**
@ -46,6 +48,11 @@ public class R2dbcMappingContext extends RelationalMappingContext {
*/ */
@Override @Override
protected boolean shouldCreatePersistentEntityFor(TypeInformation<?> type) { 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;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.mapping.model.SimpleTypeHolder;
@ -36,8 +37,8 @@ public class R2dbcSimpleTypeHolder extends SimpleTypeHolder {
/** /**
* Set of R2DBC simple types. * Set of R2DBC simple types.
*/ */
public static final Set<Class<?>> R2DBC_SIMPLE_TYPES = Collections public static final Set<Class<?>> R2DBC_SIMPLE_TYPES = Collections.unmodifiableSet(
.unmodifiableSet(new HashSet<>(Arrays.asList(OutboundRow.class, Row.class, BigInteger.class, BigDecimal.class))); new HashSet<>(Arrays.asList(OutboundRow.class, Row.class, BigInteger.class, BigDecimal.class, UUID.class)));
public static final SimpleTypeHolder HOLDER = new R2dbcSimpleTypeHolder(); 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.*;
import io.r2dbc.spi.Row; import io.r2dbc.spi.Row;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import org.junit.Test; import org.junit.Test;
import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.CustomConversions;
import org.springframework.data.convert.ReadingConverter; import org.springframework.data.convert.ReadingConverter;
import org.springframework.data.convert.WritingConverter; import org.springframework.data.convert.WritingConverter;
import org.springframework.data.r2dbc.convert.R2dbcCustomConversions; 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}. * Unit tests for {@link R2dbcMappingContext}.
@ -47,6 +54,27 @@ public class R2dbcMappingContextUnitTests {
assertThat(context.getPersistentEntity(ConvertedEntity.class)).isNotNull(); 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 { static class ConvertedEntity {
} }
@ -73,4 +101,9 @@ public class R2dbcMappingContextUnitTests {
return new ConvertedEntity(); return new ConvertedEntity();
} }
} }
static class MyEntity {
UUID id;
}
} }

Loading…
Cancel
Save