spring-projects / spring-data-relational

Spring Data Relational. Home of Spring Data JDBC and Spring Data R2DBC.
https://spring.io/projects/spring-data-jdbc
Apache License 2.0
753 stars 345 forks source link

After upgrading to 3.2.0 I started receiving IllegalArgumentException: No enum constant #1697

Closed sparkforreg closed 8 months ago

sparkforreg commented 8 months ago

Upgrading 3.1.5 -> 3.2.0 Using jdk temurin 17

I have custom converter that converts string to enum but looks like spring doesn't invoke it. I think problem is in MappingRelationalConverter.getPotentiallyConvertedSimpleRead

code "Enum.class.isAssignableFrom(target) && value instanceof CharSequence)" returns true and as result tries to convert str to enum via Enum.valueOf. But in my case expected code should be

getConversionService().convert(value, TypeDescriptor.forObject(value), createTypeDescriptor(type)). I called it in debug and it converts string to enum via my converter.

Here is stacktrace:

java.lang.IllegalArgumentException: No enum constant (I removed packet name here)
    at java.base/java.lang.Enum.valueOf(Enum.java:273)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter.getPotentiallyConvertedSimpleRead(MappingRelationalConverter.java:649)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter$DefaultConversionContext.convert(MappingRelationalConverter.java:797)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter$ConversionContext.convert(MappingRelationalConverter.java:931)
    at org.springframework.data.jdbc.core.convert.MappingJdbcConverter$ResolvingConversionContext.convert(MappingJdbcConverter.java:451)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter$DocumentValueProvider.getValue(MappingRelationalConverter.java:1113)
    at org.springframework.data.jdbc.core.convert.MappingJdbcConverter$ResolvingRelationalPropertyValueProvider.getPropertyValue(MappingJdbcConverter.java:360)
    at org.springframework.data.jdbc.core.convert.MappingJdbcConverter$ResolvingRelationalPropertyValueProvider.getPropertyValue(MappingJdbcConverter.java:310)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter.readProperties(MappingRelationalConverter.java:556)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter.populateProperties(MappingRelationalConverter.java:523)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter.read(MappingRelationalConverter.java:457)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter.readAggregate(MappingRelationalConverter.java:348)
    at org.springframework.data.relational.core.conversion.MappingRelationalConverter.readAggregate(MappingRelationalConverter.java:311)
    at org.springframework.data.jdbc.core.convert.MappingJdbcConverter.readAndResolve(MappingJdbcConverter.java:287)
    at org.springframework.data.jdbc.core.convert.JdbcConverter.readAndResolve(JdbcConverter.java:106)
    at org.springframework.data.jdbc.core.convert.EntityRowMapper.mapRow(EntityRowMapper.java:82)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:94)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:61)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:733)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:658)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:723)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:748)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:804)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:218)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:225)
mp911de commented 8 months ago

We just fixed a few bugs around that area. Care to upgrade spring-data-relational to 3.2.1-SNAPSHOT to retest whether the changes have addressed your issue?

sparkforreg commented 8 months ago

thanks. 3.2.1-SNAPSHOT works as expected

mp911de commented 8 months ago

Alright, thanks for checking. Closing as duplicate of #1689