Skip to content

Commit eeeaea6

Browse files
committed
done
1 parent a8463e0 commit eeeaea6

File tree

9 files changed

+72
-96
lines changed

9 files changed

+72
-96
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/JdbcConverter.java

+9
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,15 @@ default <R> R readAndResolve(Class<R> type, RowDocument source, Identifier ident
125125
*/
126126
SQLType getTargetSqlType(RelationalPersistentProperty property);
127127

128+
/**
129+
* The SQL type constant used when using this property as a parameter for a SQL statement.
130+
*
131+
* @return Must not be {@code null}.
132+
* @see java.sql.Types
133+
* @since 2.0
134+
*/
135+
SQLType getTargetSqlType(Class<?> property);
136+
128137
@Override
129138
RelationalMappingContext getMappingContext();
130139

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java

+11-6
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.sql.SQLType;
2222
import java.util.Iterator;
2323
import java.util.Map;
24-
import java.util.Optional;
2524
import java.util.function.Function;
2625

2726
import org.apache.commons.logging.Log;
@@ -152,6 +151,11 @@ public SQLType getTargetSqlType(RelationalPersistentProperty property) {
152151
return JdbcUtil.targetSqlTypeFor(getColumnType(property));
153152
}
154153

154+
@Override
155+
public SQLType getTargetSqlType(Class<?> property) {
156+
return JdbcUtil.targetSqlTypeFor(property);
157+
}
158+
155159
@Override
156160
public Class<?> getColumnType(RelationalPersistentProperty property) {
157161
return doGetColumnType(property);
@@ -205,13 +209,13 @@ public Object readValue(@Nullable Object value, TypeInformation<?> type) {
205209

206210
@Override
207211
@Nullable
208-
public Object writeValue(@Nullable Object value, TypeInformation<?> type) {
212+
public Object writeValue(@Nullable Object value, TypeInformation<?> targetType) {
209213

210214
if (value == null) {
211215
return null;
212216
}
213217

214-
return super.writeValue(value, type);
218+
return super.writeValue(value, targetType);
215219
}
216220

217221
private boolean canWriteAsJdbcValue(@Nullable Object value) {
@@ -236,8 +240,9 @@ private boolean canWriteAsJdbcValue(@Nullable Object value) {
236240
return true;
237241
}
238242

239-
Optional<Class<?>> customWriteTarget = getConversions().getCustomWriteTarget(value.getClass());
240-
return customWriteTarget.isPresent() && customWriteTarget.get().isAssignableFrom(JdbcValue.class);
243+
return getCustomConversions().getCustomWriteTarget(value.getClass())
244+
.filter(it -> it.isAssignableFrom(JdbcValue.class))
245+
.isPresent();
241246
}
242247

243248
@Override
@@ -353,7 +358,7 @@ public <T> T getPropertyValue(RelationalPersistentProperty property) {
353358

354359
AggregatePath aggregatePath = this.context.aggregatePath();
355360

356-
if (getConversions().isSimpleType(property.getActualType())) {
361+
if (getCustomConversions().isSimpleType(property.getActualType())) {
357362
return (T) delegate.getValue(aggregatePath);
358363
}
359364

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/QueryMapper.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -381,10 +381,12 @@ private JdbcValue convertToJdbcValue(RelationalPersistentProperty property, @Nul
381381
*/
382382
private JdbcValue getWriteValue(RelationalPersistentProperty property, Object value) {
383383

384+
Class<?> columnType = converter.getColumnType(property);
385+
384386
return converter.writeJdbcValue( //
385387
value, //
386-
converter.getColumnType(property), //
387-
converter.getTargetSqlType(property) //
388+
columnType, //
389+
converter.getTargetSqlType(columnType) //
388390
);
389391
}
390392

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/mapping/AggregateReference.java

+4-32
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
*/
1616
package org.springframework.data.jdbc.core.mapping;
1717

18-
import java.util.Objects;
19-
2018
import org.springframework.lang.Nullable;
2119
import org.springframework.util.Assert;
2220

@@ -27,6 +25,7 @@
2725
* @param <ID> the type of the id of the referenced aggregate root.
2826
* @author Jens Schauder
2927
* @author Myeonghyeon Lee
28+
* @author Mikhail Polivakha
3029
* @since 1.0
3130
*/
3231
public interface AggregateReference<T, ID> {
@@ -48,42 +47,15 @@ static <T, ID> AggregateReference<T, ID> to(ID id) {
4847
* @param <T>
4948
* @param <ID>
5049
*/
51-
class IdOnlyAggregateReference<T, ID> implements AggregateReference<T, ID> {
52-
53-
private final ID id;
54-
55-
public IdOnlyAggregateReference(ID id) {
50+
record IdOnlyAggregateReference<T, ID>(ID id) implements AggregateReference<T, ID> {
5651

52+
public IdOnlyAggregateReference {
5753
Assert.notNull(id, "Id must not be null");
58-
59-
this.id = id;
6054
}
6155

6256
@Override
6357
public ID getId() {
64-
return id;
65-
}
66-
67-
@Override
68-
public boolean equals(@Nullable Object o) {
69-
70-
if (this == o)
71-
return true;
72-
if (o == null || getClass() != o.getClass())
73-
return false;
74-
IdOnlyAggregateReference<?, ?> that = (IdOnlyAggregateReference<?, ?>) o;
75-
return id.equals(that.id);
76-
}
77-
78-
@Override
79-
public int hashCode() {
80-
return Objects.hash(id);
81-
}
82-
83-
@Override
84-
public String toString() {
85-
86-
return "IdOnlyAggregateReference{" + "id=" + id + '}';
58+
return id();
8759
}
8860
}
8961
}

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/convert/MappingR2dbcConverter.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public <R> R read(Class<R> type, Row row, @Nullable RowMetadata metadata) {
101101
return type.cast(row);
102102
}
103103

104-
if (getConversions().hasCustomReadTarget(Row.class, rawType)
104+
if (getCustomConversions().hasCustomReadTarget(Row.class, rawType)
105105
&& getConversionService().canConvert(Row.class, rawType)) {
106106
return getConversionService().convert(row, rawType);
107107
}
@@ -170,7 +170,7 @@ public void write(Object source, OutboundRow sink) {
170170

171171
Class<?> userClass = ClassUtils.getUserClass(source);
172172

173-
Optional<Class<?>> customTarget = getConversions().getCustomWriteTarget(userClass, OutboundRow.class);
173+
Optional<Class<?>> customTarget = getCustomConversions().getCustomWriteTarget(userClass, OutboundRow.class);
174174
if (customTarget.isPresent()) {
175175

176176
OutboundRow result = getConversionService().convert(source, OutboundRow.class);
@@ -212,7 +212,7 @@ private void writeProperties(OutboundRow sink, RelationalPersistentEntity<?> ent
212212
continue;
213213
}
214214

215-
if (getConversions().isSimpleType(value.getClass())) {
215+
if (getCustomConversions().isSimpleType(value.getClass())) {
216216
writeSimpleInternal(sink, value, isNew, property);
217217
} else {
218218
writePropertyInternal(sink, value, isNew, property);
@@ -286,7 +286,7 @@ private List<Object> writeCollectionInternal(Collection<?> source, @Nullable Typ
286286

287287
Class<?> elementType = element == null ? null : element.getClass();
288288

289-
if (elementType == null || getConversions().isSimpleType(elementType)) {
289+
if (elementType == null || getCustomConversions().isSimpleType(elementType)) {
290290
collection.add(getPotentiallyConvertedSimpleWrite(element,
291291
componentType != null ? componentType.getType() : Object.class));
292292
} else if (element instanceof Collection || elementType.isArray()) {
@@ -306,7 +306,7 @@ private void writeNullInternal(OutboundRow sink, RelationalPersistentProperty pr
306306

307307
private Class<?> getPotentiallyConvertedSimpleNullType(Class<?> type) {
308308

309-
Optional<Class<?>> customTarget = getConversions().getCustomWriteTarget(type);
309+
Optional<Class<?>> customTarget = getCustomConversions().getCustomWriteTarget(type);
310310

311311
if (customTarget.isPresent()) {
312312
return customTarget.get();
@@ -353,7 +353,7 @@ private Object getPotentiallyConvertedSimpleWrite(@Nullable Object value, Class<
353353
}
354354
}
355355

356-
Optional<Class<?>> customTarget = getConversions().getCustomWriteTarget(value.getClass());
356+
Optional<Class<?>> customTarget = getCustomConversions().getCustomWriteTarget(value.getClass());
357357

358358
if (customTarget.isPresent()) {
359359
return getConversionService().convert(value, customTarget.get());
@@ -393,7 +393,7 @@ public Object getArrayValue(ArrayColumns arrayColumns, RelationalPersistentPrope
393393
@Override
394394
public Class<?> getTargetType(Class<?> valueType) {
395395

396-
Optional<Class<?>> writeTarget = getConversions().getCustomWriteTarget(valueType);
396+
Optional<Class<?>> writeTarget = getCustomConversions().getCustomWriteTarget(valueType);
397397

398398
return writeTarget.orElseGet(() -> {
399399
return Enum.class.isAssignableFrom(valueType) ? String.class : valueType;
@@ -402,7 +402,7 @@ public Class<?> getTargetType(Class<?> valueType) {
402402

403403
@Override
404404
public boolean isSimpleType(Class<?> type) {
405-
return getConversions().isSimpleType(type);
405+
return getCustomConversions().isSimpleType(type);
406406
}
407407

408408
// ----------------------------------

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -852,7 +852,7 @@ public <T> RowsFetchSpec<T> getRowsFetchSpec(DatabaseClient.GenericExecuteSpec e
852852

853853
// Bridge-code: Consider Converter<Row, T> until we have fully migrated to RowDocument
854854
if (converter instanceof AbstractRelationalConverter relationalConverter
855-
&& relationalConverter.getConversions().hasCustomReadTarget(Row.class, resultType)) {
855+
&& relationalConverter.getCustomConversions().hasCustomReadTarget(Row.class, resultType)) {
856856

857857
ConversionService conversionService = relationalConverter.getConversionService();
858858
rowMapper = (row, rowMetadata) -> (T) conversionService.convert(row, resultType);

spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/repository/support/R2dbcRepositoryFactoryBeanUnitTests.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.assertj.core.api.Assertions.*;
1919
import static org.mockito.Mockito.*;
2020

21+
import org.junit.jupiter.api.Disabled;
2122
import org.junit.jupiter.api.Test;
2223

2324
import org.springframework.beans.factory.ListableBeanFactory;
@@ -26,6 +27,8 @@
2627
import org.springframework.data.r2dbc.repository.R2dbcRepository;
2728
import org.springframework.data.spel.EvaluationContextProvider;
2829
import org.springframework.data.spel.ReactiveExtensionAwareEvaluationContextProvider;
30+
import org.springframework.data.repository.query.ReactiveExtensionAwareQueryMethodEvaluationContextProvider;
31+
import org.springframework.data.repository.query.ReactiveQueryMethodEvaluationContextProvider;
2932
import org.springframework.r2dbc.core.DatabaseClient;
3033
import org.springframework.test.util.ReflectionTestUtils;
3134

@@ -56,7 +59,5 @@ void shouldConfigureReactiveExtensionAwareQueryMethodEvaluationContextProvider()
5659

5760
static class Person {}
5861

59-
interface PersonRepository extends R2dbcRepository<Person, String>
60-
61-
{}
62+
interface PersonRepository extends R2dbcRepository<Person, String> {}
6263
}

spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/AbstractRelationalConverter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public ConversionService getConversionService() {
8989
return conversionService;
9090
}
9191

92-
public CustomConversions getConversions() {
92+
public CustomConversions getCustomConversions() {
9393
return conversions;
9494
}
9595

0 commit comments

Comments
 (0)