Skip to content

Commit 4106cda

Browse files
committed
Ensure that user provided custom conversions overwrite Dialect conversions.
1 parent ec95d9f commit 4106cda

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfigurationIntegrationTests.java

+21-20
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,9 @@
1919
import static org.assertj.core.api.Assertions.*;
2020
import static org.mockito.Mockito.*;
2121

22-
import java.util.Arrays;
2322
import java.util.Collection;
24-
import java.util.Collections;
2523
import java.util.List;
24+
import java.util.Optional;
2625
import java.util.function.Consumer;
2726

2827
import org.junit.jupiter.api.Test;
@@ -37,10 +36,8 @@
3736
import org.springframework.data.jdbc.core.convert.DataAccessStrategy;
3837
import org.springframework.data.jdbc.core.convert.JdbcConverter;
3938
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions;
40-
import org.springframework.data.jdbc.core.convert.RelationResolver;
4139
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
4240
import org.springframework.data.relational.core.dialect.Dialect;
43-
import org.springframework.data.relational.core.dialect.HsqlDbDialect;
4441
import org.springframework.data.relational.core.dialect.LimitClause;
4542
import org.springframework.data.relational.core.dialect.LockClause;
4643
import org.springframework.data.relational.core.sql.render.SelectRenderContext;
@@ -77,11 +74,26 @@ void configuresInfrastructureComponents() {
7774
void registersSimpleTypesFromCustomConversions() {
7875

7976
assertApplicationContext(context -> {
77+
8078
JdbcMappingContext mappingContext = context.getBean(JdbcMappingContext.class);
8179
assertThat( //
8280
mappingContext.getPersistentEntity(AbstractJdbcConfigurationUnderTest.Blah.class) //
8381
).describedAs("Blah should not be an entity, since there is a WritingConversion configured for it") //
8482
.isNull();
83+
84+
}, AbstractJdbcConfigurationUnderTest.class, Infrastructure.class);
85+
}
86+
87+
@Test // #908
88+
void userProvidedConversionsOverwriteDialectSpecificConversions() {
89+
90+
assertApplicationContext(applicationContext -> {
91+
92+
Optional<Class<?>> customWriteTarget = applicationContext.getBean(JdbcCustomConversions.class)
93+
.getCustomWriteTarget(Boolean.class);
94+
95+
assertThat(customWriteTarget).contains(String.class);
96+
8597
}, AbstractJdbcConfigurationUnderTest.class, Infrastructure.class);
8698
}
8799

@@ -118,7 +130,7 @@ public Dialect jdbcDialect(NamedParameterJdbcOperations operations) {
118130

119131
@Override
120132
protected List<?> userConverters() {
121-
return asList(Blah2BlubbConverter.INSTANCE);
133+
return asList(Blah2BlubbConverter.INSTANCE, BooleanToYnConverter.INSTANCE);
122134
}
123135

124136
@WritingConverter
@@ -153,12 +165,12 @@ public SelectRenderContext getSelectContext() {
153165

154166
@Override
155167
public Collection<Object> getConverters() {
156-
return asList(BooleanToNumberConverter.INSTANCE);
168+
return asList(BooleanToNumberConverter.INSTANCE, NumberToBooleanConverter.INSTANCE);
157169
}
158170
}
159171

160172
@WritingConverter
161-
enum BooleanToNumberConverter implements Converter<Boolean, Number>{
173+
enum BooleanToNumberConverter implements Converter<Boolean, Number> {
162174
INSTANCE;
163175

164176
@Override
@@ -168,7 +180,7 @@ public Number convert(Boolean source) {
168180
}
169181

170182
@ReadingConverter
171-
enum NumberToBooleanConverter implements Converter<Number, Boolean>{
183+
enum NumberToBooleanConverter implements Converter<Number, Boolean> {
172184
INSTANCE;
173185

174186
@Override
@@ -177,9 +189,8 @@ public Boolean convert(Number source) {
177189
}
178190
}
179191

180-
181192
@WritingConverter
182-
enum BooleanToYnConverter implements Converter<Boolean, String>{
193+
enum BooleanToYnConverter implements Converter<Boolean, String> {
183194
INSTANCE;
184195

185196
@Override
@@ -188,16 +199,6 @@ public String convert(Boolean source) {
188199
}
189200
}
190201

191-
@ReadingConverter
192-
enum StringToBooleanConverter implements Converter<String, Boolean>{
193-
INSTANCE;
194-
195-
@Override
196-
public Boolean convert(String source) {
197-
return source.equals("Y") ;
198-
}
199-
}
200-
201202
}
202203

203204
}

0 commit comments

Comments
 (0)