#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.
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<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();
|
||||
|
||||
|
||||
@@ -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<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 {
|
||||
return new ConvertedEntity();
|
||||
}
|
||||
}
|
||||
|
||||
static class MyEntity {
|
||||
|
||||
UUID id;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user