diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraParameters.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraParameters.java index 202851762..58ec81258 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraParameters.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraParameters.java @@ -29,9 +29,11 @@ import org.springframework.data.cassandra.core.mapping.CassandraType; import org.springframework.data.cassandra.repository.query.CassandraParameters.CassandraParameter; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; +import org.springframework.data.repository.query.ParametersSource; import org.springframework.data.repository.util.QueryExecutionConverters; import org.springframework.data.repository.util.ReactiveWrapperConverters; import org.springframework.data.repository.util.ReactiveWrappers; +import org.springframework.data.util.TypeInformation; import org.springframework.lang.Nullable; /** @@ -45,15 +47,16 @@ public class CassandraParameters extends Parameters new CassandraParameter(methodParameter, parametersSource.getDomainTypeInformation())); - super(method); - - this.queryOptionsIndex = Arrays.asList(method.getParameterTypes()).indexOf(QueryOptions.class); + this.queryOptionsIndex = Arrays.asList(parametersSource.getMethod().getParameterTypes()) + .indexOf(QueryOptions.class); } private CassandraParameters(List originals, @Nullable Integer queryOptionsIndex) { @@ -63,11 +66,6 @@ public class CassandraParameters extends Parameters parameters) { return new CassandraParameters(parameters, queryOptionsIndex); @@ -93,9 +91,9 @@ public class CassandraParameters extends Parameters parameterType; - CassandraParameter(MethodParameter parameter) { + CassandraParameter(MethodParameter parameter, TypeInformation domainType) { - super(parameter); + super(parameter, domainType); AnnotatedParameter annotatedParameter = new AnnotatedParameter(parameter); diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryMethod.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryMethod.java index 48b50069b..9e1ff270c 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryMethod.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/query/CassandraQueryMethod.java @@ -29,6 +29,8 @@ import org.springframework.data.cassandra.repository.Query.Idempotency; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.repository.core.RepositoryMetadata; +import org.springframework.data.repository.query.Parameters; +import org.springframework.data.repository.query.ParametersSource; import org.springframework.data.repository.query.QueryMethod; import org.springframework.data.util.TypeInformation; import org.springframework.lang.Nullable; @@ -128,8 +130,8 @@ public class CassandraQueryMethod extends QueryMethod { } @Override - protected CassandraParameters createParameters(Method method) { - return new CassandraParameters(method); + protected Parameters createParameters(ParametersSource parametersSource) { + return new CassandraParameters(parametersSource); } /** diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/QueryDerivationIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/QueryDerivationIntegrationTests.java index d0658fa68..6292b2f76 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/QueryDerivationIntegrationTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/QueryDerivationIntegrationTests.java @@ -80,7 +80,8 @@ class QueryDerivationIntegrationTests extends AbstractSpringDataEmbeddedCassandr @Configuration @EnableCassandraRepositories(considerNestedRepositories = true, - includeFilters = @Filter(pattern = ".*PersonRepository", type = FilterType.REGEX)) + includeFilters = @Filter(classes = { PersonRepository.class, EmbeddedPersonRepository.class }, + type = FilterType.ASSIGNABLE_TYPE)) public static class Config extends IntegrationTestConfig { @Override diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/query/CassandraParametersUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/query/CassandraParametersUnitTests.java index 4e9bcd5f2..32985152a 100755 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/query/CassandraParametersUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/query/CassandraParametersUnitTests.java @@ -28,6 +28,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.data.cassandra.core.mapping.CassandraType; import org.springframework.data.cassandra.domain.Person; +import org.springframework.data.repository.Repository; +import org.springframework.data.repository.core.support.DefaultRepositoryMetadata; +import org.springframework.data.repository.query.ParametersSource; /** * Unit tests for {@link CassandraParameters}. @@ -43,7 +46,8 @@ class CassandraParametersUnitTests { void shouldReturnUnknownDataTypeForSimpleType() throws Exception { Method method = PersonRepository.class.getMethod("findByFirstname", String.class); - CassandraParameters cassandraParameters = new CassandraParameters(method); + CassandraParameters cassandraParameters = new CassandraParameters( + ParametersSource.of(method)); assertThat(cassandraParameters.getParameter(0).getCassandraType()).isNull(); } @@ -52,17 +56,17 @@ class CassandraParametersUnitTests { void shouldReturnDataTypeForAnnotatedSimpleType() throws Exception { Method method = PersonRepository.class.getMethod("findByFirstTime", String.class); - CassandraParameters cassandraParameters = new CassandraParameters(method); + CassandraParameters cassandraParameters = new CassandraParameters( + ParametersSource.of(method)); - assertThat(cassandraParameters.getParameter(0).getCassandraType().type()) - .isEqualTo(Name.TIME); + assertThat(cassandraParameters.getParameter(0).getCassandraType().type()).isEqualTo(Name.TIME); } @Test // DATACASS-296 void shouldReturnNoTypeForComplexType() throws Exception { Method method = PersonRepository.class.getMethod("findByObject", Object.class); - CassandraParameters cassandraParameters = new CassandraParameters(method); + CassandraParameters cassandraParameters = new CassandraParameters(ParametersSource.of(method)); assertThat(cassandraParameters.getParameter(0).getCassandraType()).isNull(); } @@ -71,23 +75,21 @@ class CassandraParametersUnitTests { void shouldReturnTypeForAnnotatedType() throws Exception { Method method = PersonRepository.class.getMethod("findByAnnotatedObject", Object.class); - CassandraParameters cassandraParameters = new CassandraParameters(method); + CassandraParameters cassandraParameters = new CassandraParameters(ParametersSource.of(method)); - assertThat(cassandraParameters.getParameter(0).getCassandraType().type()) - .isEqualTo(Name.TIME); + assertThat(cassandraParameters.getParameter(0).getCassandraType().type()).isEqualTo(Name.TIME); } @Test // DATACASS-296 void shouldReturnTypeForComposedAnnotationType() throws Exception { Method method = PersonRepository.class.getMethod("findByComposedAnnotationObject", Object.class); - CassandraParameters cassandraParameters = new CassandraParameters(method); + CassandraParameters cassandraParameters = new CassandraParameters(ParametersSource.of(method)); - assertThat(cassandraParameters.getParameter(0).getCassandraType().type()) - .isEqualTo(Name.BOOLEAN); + assertThat(cassandraParameters.getParameter(0).getCassandraType().type()).isEqualTo(Name.BOOLEAN); } - interface PersonRepository { + interface PersonRepository extends Repository { Person findByFirstname(String firstname);