Browse Source

Fix Enum[] type conversion.

Since 3.0.5, Enum[] type are detect as "UNKNOWN"

Closes #1460
Original Pull request #1521
3.0.x
Vincent Galloy 3 years ago committed by Jens Schauder
parent
commit
06943211b7
No known key found for this signature in database
GPG Key ID: 9537B67540F0A581
  1. 21
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java
  2. 2
      spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/BasicRelationalConverter.java

21
spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java

@ -1045,6 +1045,16 @@ class JdbcAggregateTemplateIntegrationTests { @@ -1045,6 +1045,16 @@ class JdbcAggregateTemplateIntegrationTests {
assertThat(template.findById(entity.id, WithInsertOnly.class).insertOnly).isEqualTo("first value");
}
@Test // GH-1460
void readEnumArray() {
EnumArrayOwner entity = new EnumArrayOwner();
entity.digits = new Color[]{Color.BLUE};
assertThat(template.save(entity)).isNotNull();
assertThat(template.findById(entity.id, EnumArrayOwner.class).digits).isEqualTo(new Color[]{Color.BLUE});
}
private <T extends Number> void saveAndUpdateAggregateWithVersion(VersionedAggregate aggregate,
Function<Number, T> toConcreteNumber) {
saveAndUpdateAggregateWithVersion(aggregate, toConcreteNumber, 0);
@ -1086,6 +1096,17 @@ class JdbcAggregateTemplateIntegrationTests { @@ -1086,6 +1096,17 @@ class JdbcAggregateTemplateIntegrationTests {
return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM " + tableName, emptyMap(), Long.class);
}
enum Color {
BLUE
}
@Table("ARRAY_OWNER")
private static class EnumArrayOwner {
@Id Long id;
Color[] digits;
}
@Table("ARRAY_OWNER")
private static class ArrayOwner {
@Id Long id;

2
spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/BasicRelationalConverter.java

@ -175,7 +175,7 @@ public class BasicRelationalConverter implements RelationalConverter { @@ -175,7 +175,7 @@ public class BasicRelationalConverter implements RelationalConverter {
// TODO: We should add conversion support for arrays, however,
// these should consider multi-dimensional arrays as well.
if (value.getClass().isArray() && (TypeInformation.OBJECT.equals(type) || type.isCollectionLike())) {
if (value.getClass().isArray() && !value.getClass().getComponentType().isEnum() && (TypeInformation.OBJECT.equals(type) || type.isCollectionLike())) {
return value;
}

Loading…
Cancel
Save