@ -15,12 +15,13 @@
@@ -15,12 +15,13 @@
* /
package org.springframework.data.jdbc.repository.config ;
import static java.util.Arrays.* ;
import static org.assertj.core.api.Assertions.* ;
import static org.mockito.Mockito.* ;
import java.util.Arrays ;
import java.util.Collections ;
import java.util.Collection ;
import java.util.List ;
import java.util.Optional ;
import java.util.function.Consumer ;
import org.junit.jupiter.api.Test ;
@ -29,6 +30,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
@@ -29,6 +30,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.context.annotation.Bean ;
import org.springframework.context.annotation.Configuration ;
import org.springframework.core.convert.converter.Converter ;
import org.springframework.data.convert.ReadingConverter ;
import org.springframework.data.convert.WritingConverter ;
import org.springframework.data.jdbc.core.JdbcAggregateTemplate ;
import org.springframework.data.jdbc.core.convert.DataAccessStrategy ;
@ -36,7 +38,9 @@ import org.springframework.data.jdbc.core.convert.JdbcConverter;
@@ -36,7 +38,9 @@ import org.springframework.data.jdbc.core.convert.JdbcConverter;
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions ;
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext ;
import org.springframework.data.relational.core.dialect.Dialect ;
import org.springframework.data.relational.core.dialect.HsqlDbDialect ;
import org.springframework.data.relational.core.dialect.LimitClause ;
import org.springframework.data.relational.core.dialect.LockClause ;
import org.springframework.data.relational.core.sql.render.SelectRenderContext ;
import org.springframework.jdbc.core.JdbcOperations ;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations ;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate ;
@ -53,7 +57,7 @@ public class AbstractJdbcConfigurationIntegrationTests {
@@ -53,7 +57,7 @@ public class AbstractJdbcConfigurationIntegrationTests {
assertApplicationContext ( context - > {
List < Class < ? > > expectedBeanTypes = Arrays . asList ( DataAccessStrategy . class , //
List < Class < ? > > expectedBeanTypes = asList ( DataAccessStrategy . class , //
JdbcMappingContext . class , //
JdbcConverter . class , //
JdbcCustomConversions . class , //
@ -70,11 +74,26 @@ public class AbstractJdbcConfigurationIntegrationTests {
@@ -70,11 +74,26 @@ public class AbstractJdbcConfigurationIntegrationTests {
void registersSimpleTypesFromCustomConversions ( ) {
assertApplicationContext ( context - > {
JdbcMappingContext mappingContext = context . getBean ( JdbcMappingContext . class ) ;
assertThat ( //
mappingContext . getPersistentEntity ( AbstractJdbcConfigurationUnderTest . Blah . class ) //
) . describedAs ( "Blah should not be an entity, since there is a WritingConversion configured for it" ) //
. isNull ( ) ;
} , AbstractJdbcConfigurationUnderTest . class , Infrastructure . class ) ;
}
@Test // #908
void userProvidedConversionsOverwriteDialectSpecificConversions ( ) {
assertApplicationContext ( applicationContext - > {
Optional < Class < ? > > customWriteTarget = applicationContext . getBean ( JdbcCustomConversions . class )
. getCustomWriteTarget ( Boolean . class ) ;
assertThat ( customWriteTarget ) . contains ( String . class ) ;
} , AbstractJdbcConfigurationUnderTest . class , Infrastructure . class ) ;
}
@ -106,12 +125,12 @@ public class AbstractJdbcConfigurationIntegrationTests {
@@ -106,12 +125,12 @@ public class AbstractJdbcConfigurationIntegrationTests {
@Override
@Bean
public Dialect jdbcDialect ( NamedParameterJdbcOperations operations ) {
return HsqlDbDialect . INSTANCE ;
return new DummyDialect ( ) ;
}
@Override
public JdbcCustomConversions jdbcCustomConversion s ( ) {
return new JdbcCustomConversions ( Collections . singletonList ( Blah2Blubb Converter. INSTANCE ) ) ;
protected List < ? > userConverter s ( ) {
return asList ( Blah2BlubbConverter . INSTANCE , BooleanToYn Converter. INSTANCE ) ;
}
@WritingConverter
@ -127,6 +146,59 @@ public class AbstractJdbcConfigurationIntegrationTests {
@@ -127,6 +146,59 @@ public class AbstractJdbcConfigurationIntegrationTests {
private static class Blah { }
private static class Blubb { }
private static class DummyDialect implements Dialect {
@Override
public LimitClause limit ( ) {
return null ;
}
@Override
public LockClause lock ( ) {
return null ;
}
@Override
public SelectRenderContext getSelectContext ( ) {
return null ;
}
@Override
public Collection < Object > getConverters ( ) {
return asList ( BooleanToNumberConverter . INSTANCE , NumberToBooleanConverter . INSTANCE ) ;
}
}
@WritingConverter
enum BooleanToNumberConverter implements Converter < Boolean , Number > {
INSTANCE ;
@Override
public Number convert ( Boolean source ) {
return source ? 1 : 0 ;
}
}
@ReadingConverter
enum NumberToBooleanConverter implements Converter < Number , Boolean > {
INSTANCE ;
@Override
public Boolean convert ( Number source ) {
return source . intValue ( ) = = 0 ;
}
}
@WritingConverter
enum BooleanToYnConverter implements Converter < Boolean , String > {
INSTANCE ;
@Override
public String convert ( Boolean source ) {
return source ? "Y" : "N" ;
}
}
}
}