From 5493770b7faeeff756b4759b8c3e61a73a012fa0 Mon Sep 17 00:00:00 2001 From: Vincent Galloy Date: Tue, 23 May 2023 11:11:20 +0200 Subject: [PATCH] Fix Enum[] type convertion Since 3.0.5, Enum[] type are detect as "UNKNOWN" Closes: #1460 --- ...JdbcAggregateTemplateIntegrationTests.java | 21 +++++++++++++++++++ .../conversion/BasicRelationalConverter.java | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) 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; }