diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java index 2c32fcaeb0..2f52b70410 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java @@ -1082,6 +1082,16 @@ void insertOnlyPropertyDoesNotGetUpdated() { 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 void saveAndUpdateAggregateWithVersion(VersionedAggregate aggregate, Function toConcreteNumber) { saveAndUpdateAggregateWithVersion(aggregate, toConcreteNumber, 0); @@ -1123,6 +1133,17 @@ private Long count(String tableName) { 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; diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/BasicRelationalConverter.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/BasicRelationalConverter.java index 710438ffd3..4703219761 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/BasicRelationalConverter.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/BasicRelationalConverter.java @@ -176,7 +176,7 @@ public Object writeValue(@Nullable Object value, TypeInformation type) { // 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; }