Skip to content

Commit 08daf47

Browse files
mipo256schauder
authored andcommitted
Refactoring.
Clarified nullabillity for Identifier. Removed usage of deprecated constructor for StringBasedJdbcQuery. Original pull request #1901
1 parent 95a9f64 commit 08daf47

File tree

5 files changed

+14
-11
lines changed

5 files changed

+14
-11
lines changed

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Objects;
2525

2626
import org.springframework.data.relational.core.sql.SqlIdentifier;
27+
import org.springframework.lang.NonNull;
2728
import org.springframework.lang.Nullable;
2829
import org.springframework.util.Assert;
2930
import org.springframework.util.ClassUtils;
@@ -60,17 +61,16 @@ public static Identifier empty() {
6061
* Creates an {@link Identifier} from {@code name}, {@code value}, and a {@link Class target type}.
6162
*
6263
* @param name must not be {@literal null} or empty.
63-
* @param value
64+
* @param value must not be null
6465
* @param targetType must not be {@literal null}.
6566
* @return the {@link Identifier} for {@code name}, {@code value}, and a {@link Class target type}.
6667
*/
6768
public static Identifier of(SqlIdentifier name, Object value, Class<?> targetType) {
6869

6970
Assert.notNull(name, "Name must not be empty");
71+
Assert.notNull(value, "Value must not be empty");
7072
Assert.notNull(targetType, "Target type must not be null");
7173

72-
// TODO: Is value allowed to be null? SingleIdentifierValue says so, but this type doesn't allows it and
73-
// SqlParametersFactory.lambda$forQueryByIdentifier$1 fails with a NPE.
7474
return new Identifier(Collections.singletonList(new SingleIdentifierValue(name, value, targetType)));
7575
}
7676

@@ -92,7 +92,8 @@ public static Identifier from(Map<SqlIdentifier, Object> map) {
9292

9393
map.forEach((k, v) -> {
9494

95-
values.add(new SingleIdentifierValue(k, v, v != null ? ClassUtils.getUserClass(v) : Object.class));
95+
Assert.notNull(v, "The source map for identifier cannot contain null values");
96+
values.add(new SingleIdentifierValue(k, v, ClassUtils.getUserClass(v)));
9697
});
9798

9899
return new Identifier(Collections.unmodifiableList(values));
@@ -199,9 +200,10 @@ static final class SingleIdentifierValue {
199200
private final Object value;
200201
private final Class<?> targetType;
201202

202-
private SingleIdentifierValue(SqlIdentifier name, @Nullable Object value, Class<?> targetType) {
203+
private SingleIdentifierValue(SqlIdentifier name, Object value, Class<?> targetType) {
203204

204205
Assert.notNull(name, "Name must not be null");
206+
Assert.notNull(value, "Name must not be null");
205207
Assert.notNull(targetType, "TargetType must not be null");
206208

207209
this.name = name;

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ public static JdbcIdentifierBuilder empty() {
4040
/**
4141
* Creates ParentKeys with backreference for the given path and value of the parents id.
4242
*/
43-
public static JdbcIdentifierBuilder forBackReferences(JdbcConverter converter, AggregatePath path,
44-
@Nullable Object value) {
43+
public static JdbcIdentifierBuilder forBackReferences(JdbcConverter converter, AggregatePath path, Object value) {
4544

4645
Identifier identifier = Identifier.of( //
4746
path.getTableInfo().reverseColumnInfo().name(), //

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public class StringBasedJdbcQuery extends AbstractJdbcQuery {
9292
public StringBasedJdbcQuery(JdbcQueryMethod queryMethod, NamedParameterJdbcOperations operations,
9393
@Nullable RowMapper<?> defaultRowMapper, JdbcConverter converter,
9494
QueryMethodEvaluationContextProvider evaluationContextProvider) {
95-
this(queryMethod, operations, result -> (RowMapper<Object>) defaultRowMapper, converter, evaluationContextProvider);
95+
this(queryMethod.getRequiredQuery(), queryMethod, operations, result -> (RowMapper<Object>) defaultRowMapper, converter, evaluationContextProvider);
9696
}
9797

9898
/**

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/IdentifierUnitTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,16 @@ public void getParametersByName() {
5050
public void parametersWithStringKeysUseObjectAsTypeForNull() {
5151

5252
HashMap<SqlIdentifier, Object> parameters = new HashMap<>();
53-
parameters.put(unquoted("one"), null);
53+
Object value = new Object();
54+
55+
parameters.put(unquoted("one"), value);
5456

5557
Identifier identifier = Identifier.from(parameters);
5658

5759
assertThat(identifier.getParts()) //
5860
.extracting("name", "value", "targetType") //
5961
.containsExactly( //
60-
Assertions.tuple(unquoted("one"), null, Object.class) //
62+
Assertions.tuple(unquoted("one"), value, Object.class) //
6163
);
6264
}
6365

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ public SqlParameterSource extractParameterSource() {
397397
mock(RelationResolver.class))
398398
: this.converter;
399399

400-
StringBasedJdbcQuery query = new StringBasedJdbcQuery(method, operations, result -> mock(RowMapper.class),
400+
StringBasedJdbcQuery query = new StringBasedJdbcQuery(method.getDeclaredQuery(), method, operations, result -> mock(RowMapper.class),
401401
converter, evaluationContextProvider);
402402

403403
query.execute(arguments);

0 commit comments

Comments
 (0)