diff --git a/src/main/java/org/springframework/data/neo4j/repository/query/Neo4jQueryMethod.java b/src/main/java/org/springframework/data/neo4j/repository/query/Neo4jQueryMethod.java index 01f9b0baf..7454e33d3 100644 --- a/src/main/java/org/springframework/data/neo4j/repository/query/Neo4jQueryMethod.java +++ b/src/main/java/org/springframework/data/neo4j/repository/query/Neo4jQueryMethod.java @@ -22,7 +22,6 @@ import java.util.Optional; import org.springframework.core.MethodParameter; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.data.neo4j.repository.support.CypherdslStatementExecutor; -import org.springframework.data.neo4j.repository.support.ReactiveCypherdslStatementExecutor; import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.Parameter; @@ -61,12 +60,24 @@ class Neo4jQueryMethod extends QueryMethod { * @param factory must not be {@literal null}. */ Neo4jQueryMethod(Method method, RepositoryMetadata metadata, ProjectionFactory factory) { + this(method, metadata, factory, ClassUtils.hasMethod(CypherdslStatementExecutor.class, method)); + } + + /** + * Allows to configure {@link #cypherBasedProjection} from inheriting classes. Not meant to be called outside the + * inheritance tree. + * + * @param method must not be {@literal null}. + * @param metadata must not be {@literal null}. + * @param factory must not be {@literal null}. + * @param cypherBasedProjection True if this points to a Cypher-DSL based projection. + */ + Neo4jQueryMethod(Method method, RepositoryMetadata metadata, ProjectionFactory factory, boolean cypherBasedProjection) { super(method, metadata, factory); Class declaringClass = method.getDeclaringClass(); this.repositoryName = declaringClass.getName(); - this.cypherBasedProjection = ClassUtils.hasMethod(CypherdslStatementExecutor.class, method) || ClassUtils - .hasMethod(ReactiveCypherdslStatementExecutor.class, method); + this.cypherBasedProjection = cypherBasedProjection; this.queryAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, Query.class); } diff --git a/src/main/java/org/springframework/data/neo4j/repository/query/ReactiveNeo4jQueryMethod.java b/src/main/java/org/springframework/data/neo4j/repository/query/ReactiveNeo4jQueryMethod.java index 3b9816e6e..a8acb861f 100644 --- a/src/main/java/org/springframework/data/neo4j/repository/query/ReactiveNeo4jQueryMethod.java +++ b/src/main/java/org/springframework/data/neo4j/repository/query/ReactiveNeo4jQueryMethod.java @@ -21,6 +21,7 @@ import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; +import org.springframework.data.neo4j.repository.support.ReactiveCypherdslStatementExecutor; import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.util.ReactiveWrappers; @@ -54,7 +55,7 @@ final class ReactiveNeo4jQueryMethod extends Neo4jQueryMethod { * @param factory must not be {@literal null}. */ ReactiveNeo4jQueryMethod(Method method, RepositoryMetadata metadata, ProjectionFactory factory) { - super(method, metadata, factory); + super(method, metadata, factory, ClassUtils.hasMethod(ReactiveCypherdslStatementExecutor.class, method)); if (org.springframework.data.repository.util.ClassUtils.hasParameterOfType(method, Pageable.class)) {