Closed
Description
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:
- spring-data-jdbc-id-conversion-bug.zip (63.76 kB)
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