Skip to content

JdbcCustomConversions not applied to primary key on lookup [DATAJDBC-349] #571

Closed
@spring-projects-issues

Description

@spring-projects-issues

Dav1dde opened DATAJDBC-349 and commented

Code:

public class StockImageEntity implements AggregateRoot {
    @Id
    @Column("ID")
    private UUID id;

    @Singular
    @Column("IMAGE_ID")
    private Set<ImageResolutionEntity> resolutions;
}

public class ImageResolutionEntity implements Identifiable {
    @Id
    @Column("ID")
    private UUID id;
} 

 

@Configuration
public class CustomJdbcConfiguration extends JdbcConfiguration {
    @Override
    public RelationalMappingContext jdbcMappingContext(Optional<NamingStrategy> namingStrategy) {
        return super.jdbcMappingContext(namingStrategy);
    }    @Override
    public RelationalConverter relationalConverter(RelationalMappingContext mappingContext) {
        return super.relationalConverter(mappingContext);
    }    @Override
    public JdbcCustomConversions jdbcCustomConversions() {
        return new JdbcCustomConversions(List.of(
            MediaTypeStringConverters.reader(),
            MediaTypeStringConverters.writer(),
            UuidStringConverters.reader(),
            UuidStringConverters.writer()
        ));
    }
}

Now querying for a StockImageEntity results in the following exception:

Caused by: java.sql.SQLException: Invalid column typeCaused by: java.sql.SQLException: Invalid column type at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8488) ~[ojdbc8-12.2.0.1.jar:12.2.0.1.0] at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7995) ~[ojdbc8-12.2.0.1.jar:12.2.0.1.0] at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8735) ~[ojdbc8-12.2.0.1.jar:12.2.0.1.0] at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:8714) ~[ojdbc8-12.2.0.1.jar:12.2.0.1.0] at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:219) ~[ojdbc8-12.2.0.1.jar:12.2.0.1.0] at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setObject(HikariProxyPreparedStatement.java) ~[HikariCP-3.2.0.jar:na] at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:411) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:232) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:147) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.setValues(PreparedStatementCreatorFactory.java:286) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:244) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:615) ~[spring-jdbc-5.1.5.RELEASE.jar:5.1.5.RELEASE] ... 80 common frames omitted

 

The Problem seems to be in org.springframework.data.jdbc.core.DefaultDataAccessStrategy#findAllByProperty:

MapSqlParameterSource parameter = new MapSqlParameterSource(property.getReverseColumnName(), rootId);

Where rootId is the unconverted UUID. This might also be a problem for delete Operations


Attachments:

Issue Links:

  • DATAJDBC-587 Convert identity value object to SQL type with custom converter in Finding and Deletion by property path
    ("is duplicated by")

2 votes, 4 watchers

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions