Skip to content

Commit 44447da

Browse files
committed
#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.
1 parent d7da49e commit 44447da

File tree

3 files changed

+44
-4
lines changed

3 files changed

+44
-4
lines changed

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

+8-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import org.springframework.data.relational.core.mapping.NamingStrategy;
1919
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
20+
import org.springframework.data.util.ReflectionUtils;
2021
import org.springframework.data.util.TypeInformation;
2122

2223
/**
@@ -40,12 +41,17 @@ public R2dbcMappingContext(NamingStrategy namingStrategy) {
4041
super(namingStrategy);
4142
}
4243

43-
/*
44+
/*
4445
* (non-Javadoc)
4546
* @see org.springframework.data.mapping.context.AbstractMappingContext#shouldCreatePersistentEntityFor(org.springframework.data.util.TypeInformation)
4647
*/
4748
@Override
4849
protected boolean shouldCreatePersistentEntityFor(TypeInformation<?> type) {
49-
return !R2dbcSimpleTypeHolder.HOLDER.isSimpleType(type.getType());
50+
51+
if (R2dbcSimpleTypeHolder.HOLDER.isSimpleType(type.getType())) {
52+
return false;
53+
}
54+
55+
return !ReflectionUtils.isKotlinClass(type.getType()) || ReflectionUtils.isSupportedKotlinClass(type.getType());
5056
}
5157
}

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Collections;
2424
import java.util.HashSet;
2525
import java.util.Set;
26+
import java.util.UUID;
2627

2728
import org.springframework.data.mapping.model.SimpleTypeHolder;
2829

@@ -36,8 +37,8 @@ public class R2dbcSimpleTypeHolder extends SimpleTypeHolder {
3637
/**
3738
* Set of R2DBC simple types.
3839
*/
39-
public static final Set<Class<?>> R2DBC_SIMPLE_TYPES = Collections
40-
.unmodifiableSet(new HashSet<>(Arrays.asList(OutboundRow.class, Row.class, BigInteger.class, BigDecimal.class)));
40+
public static final Set<Class<?>> R2DBC_SIMPLE_TYPES = Collections.unmodifiableSet(
41+
new HashSet<>(Arrays.asList(OutboundRow.class, Row.class, BigInteger.class, BigDecimal.class, UUID.class)));
4142

4243
public static final SimpleTypeHolder HOLDER = new R2dbcSimpleTypeHolder();
4344

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

+33
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,21 @@
1919

2020
import io.r2dbc.spi.Row;
2121

22+
import java.util.ArrayList;
2223
import java.util.Arrays;
24+
import java.util.Collections;
25+
import java.util.List;
26+
import java.util.UUID;
2327

2428
import org.junit.Test;
2529

2630
import org.springframework.core.convert.converter.Converter;
31+
import org.springframework.data.convert.CustomConversions;
2732
import org.springframework.data.convert.ReadingConverter;
2833
import org.springframework.data.convert.WritingConverter;
2934
import org.springframework.data.r2dbc.convert.R2dbcCustomConversions;
35+
import org.springframework.data.r2dbc.dialect.PostgresDialect;
36+
import org.springframework.data.r2dbc.dialect.R2dbcDialect;
3037

3138
/**
3239
* Unit tests for {@link R2dbcMappingContext}.
@@ -47,6 +54,27 @@ public void shouldCreateMetadataForConvertedTypes() {
4754
assertThat(context.getPersistentEntity(ConvertedEntity.class)).isNotNull();
4855
}
4956

57+
@Test // gh-284
58+
public void shouldNotCreateEntityForUUID() {
59+
60+
R2dbcDialect dialect = PostgresDialect.INSTANCE;
61+
62+
List<Object> converters = new ArrayList<>(dialect.getConverters());
63+
converters.addAll(R2dbcCustomConversions.STORE_CONVERTERS);
64+
65+
CustomConversions.StoreConversions storeConversions = CustomConversions.StoreConversions
66+
.of(dialect.getSimpleTypeHolder(), converters);
67+
68+
R2dbcCustomConversions conversions = new R2dbcCustomConversions(storeConversions, Collections.emptyList());
69+
70+
R2dbcMappingContext context = new R2dbcMappingContext();
71+
context.setSimpleTypeHolder(conversions.getSimpleTypeHolder());
72+
context.afterPropertiesSet();
73+
74+
assertThat(context.getPersistentEntity(MyEntity.class)).isNotNull();
75+
assertThat(context.getPersistentEntity(UUID.class)).isNull();
76+
}
77+
5078
static class ConvertedEntity {
5179

5280
}
@@ -73,4 +101,9 @@ public ConvertedEntity convert(Row source) {
73101
return new ConvertedEntity();
74102
}
75103
}
104+
105+
static class MyEntity {
106+
107+
UUID id;
108+
}
76109
}

0 commit comments

Comments
 (0)