From f9c6aaeec7338a048a579d5ef6c83d5f0077ee5e Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 5 Dec 2023 15:07:40 +0100 Subject: [PATCH] Create PartTree against the domain type. We now derive queries against the domain type and no longer using the result type to ensure query mapping and query creation against the domain type. Closes #1688 --- .../jdbc/repository/query/PartTreeJdbcQuery.java | 3 ++- .../r2dbc/repository/query/PartTreeR2dbcQuery.java | 12 ++++++------ .../query/PartTreeR2dbcQueryUnitTests.java | 11 ++++++----- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/PartTreeJdbcQuery.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/PartTreeJdbcQuery.java index ecdbbc51..a7947517 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/PartTreeJdbcQuery.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/PartTreeJdbcQuery.java @@ -107,7 +107,8 @@ public class PartTreeJdbcQuery extends AbstractJdbcQuery { this.converter = converter; this.rowMapperFactory = rowMapperFactory; - this.tree = new PartTree(queryMethod.getName(), queryMethod.getEntityInformation().getJavaType()); + this.tree = new PartTree(queryMethod.getName(), queryMethod.getResultProcessor() + .getReturnedType().getDomainType()); JdbcQueryCreator.validate(this.tree, this.parameters, this.converter.getMappingContext()); } diff --git a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQuery.java b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQuery.java index fddd21df..27ac213a 100644 --- a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQuery.java +++ b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQuery.java @@ -67,7 +67,8 @@ public class PartTreeR2dbcQuery extends AbstractR2dbcQuery { this.parameters = method.getParameters(); try { - this.tree = new PartTree(method.getName(), method.getEntityInformation().getJavaType()); + this.tree = new PartTree(method.getName(), processor.getReturnedType() + .getDomainType()); R2dbcQueryCreator.validate(this.tree, this.parameters); } catch (RuntimeException e) { throw new IllegalArgumentException( @@ -115,10 +116,9 @@ public class PartTreeR2dbcQuery extends AbstractR2dbcQuery { @Override public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(getClass().getSimpleName()); - sb.append(" [").append(getQueryMethod().getName()); - sb.append(']'); - return sb.toString(); + String sb = getClass().getSimpleName() + + " [" + getQueryMethod().getName() + + ']'; + return sb; } } diff --git a/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java b/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java index 99c5410b..a13f87a0 100644 --- a/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java +++ b/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/repository/query/PartTreeR2dbcQueryUnitTests.java @@ -692,12 +692,13 @@ class PartTreeR2dbcQueryUnitTests { .from(TABLE); } - @Test // GH-475 + @Test + // GH-475, GH-1687 void createsDtoProjectionQuery() throws Exception { - R2dbcQueryMethod queryMethod = getQueryMethod("findAsDtoProjectionBy"); + R2dbcQueryMethod queryMethod = getQueryMethod("findAsDtoProjectionByAge", Integer.TYPE); PartTreeR2dbcQuery r2dbcQuery = new PartTreeR2dbcQuery(queryMethod, operations, r2dbcConverter, dataAccessStrategy); - PreparedOperation preparedOperation = createQuery(queryMethod, r2dbcQuery); + PreparedOperation preparedOperation = createQuery(queryMethod, r2dbcQuery, 42); PreparedOperationAssert.assertThat(preparedOperation) // .selects("users.id", "users.first_name", "users.last_name", "users.date_of_birth", "users.age", "users.active") // @@ -756,7 +757,7 @@ class PartTreeR2dbcQueryUnitTests { R2dbcQueryMethod queryMethod = getQueryMethod("findByFirstName", Mono.class); PartTreeR2dbcQuery r2dbcQuery = new PartTreeR2dbcQuery(queryMethod, operations, r2dbcConverter, dataAccessStrategy); - R2dbcParameterAccessor accessor = new R2dbcParameterAccessor(queryMethod, new Object[] { Mono.just("John") }); + R2dbcParameterAccessor accessor = new R2dbcParameterAccessor(queryMethod, Mono.just("John")); PreparedOperation preparedOperation = createQuery(r2dbcQuery, accessor.resolveParameters().block()); BindTarget bindTarget = mock(BindTarget.class); @@ -986,7 +987,7 @@ class PartTreeR2dbcQueryUnitTests { Mono findOpenProjectionBy(); - Mono findAsDtoProjectionBy(); + Mono findAsDtoProjectionByAge(int age); Mono deleteByFirstName(String firstName);