diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java index faa44ae918..af2200b208 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java @@ -45,6 +45,7 @@ import org.springframework.data.repository.query.QueryMethod; import org.springframework.data.util.Lazy; import org.springframework.data.util.ReactiveWrappers; +import org.springframework.data.util.ReflectionUtils; import org.springframework.data.util.TypeInformation; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -532,7 +533,7 @@ private boolean isNumericOrVoidReturnValue() { } boolean isUpdateCountReturnType = ClassUtils.isAssignable(Number.class, resultType); - boolean isVoidReturnType = ClassUtils.isAssignable(Void.class, resultType); + boolean isVoidReturnType = ReflectionUtils.isVoid(resultType); return isUpdateCountReturnType || isVoidReturnType; } diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/repository/KotlinRepositoryUnitTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/repository/KotlinRepositoryUnitTests.kt index bed470d703..1f888ad9e2 100644 --- a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/repository/KotlinRepositoryUnitTests.kt +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/repository/KotlinRepositoryUnitTests.kt @@ -45,7 +45,7 @@ class KotlinRepositoryUnitTests { } @Test // DATAMONGO-2601 - fun should() { + fun shouldSupportDeleteMethods() { val repository = repositoryFactory.getRepository(PersonRepository::class.java) diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryMethodCoroutineUnitTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryMethodCoroutineUnitTests.kt index e5885de39c..dbf5447676 100644 --- a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryMethodCoroutineUnitTests.kt +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryMethodCoroutineUnitTests.kt @@ -17,9 +17,11 @@ package org.springframework.data.mongodb.repository.query import kotlinx.coroutines.flow.Flow import org.assertj.core.api.Assertions.assertThat +import org.assertj.core.api.Assertions.assertThatNoException import org.junit.jupiter.api.Test import org.springframework.data.mongodb.core.mapping.MongoMappingContext import org.springframework.data.mongodb.repository.Person +import org.springframework.data.mongodb.repository.Update import org.springframework.data.projection.SpelAwareProxyProjectionFactory import org.springframework.data.repository.core.support.DefaultRepositoryMetadata import org.springframework.data.repository.kotlin.CoroutineCrudRepository @@ -41,6 +43,9 @@ class ReactiveMongoQueryMethodCoroutineUnitTests { fun findAllByName(): Flow suspend fun findSuspendByName(): List + + @Update("{ \$inc: { age: 1 } }") + suspend fun findAndIncrementAgeByName(name: String) } @Test // DATAMONGO-2562 @@ -69,4 +74,13 @@ class ReactiveMongoQueryMethodCoroutineUnitTests { assertThat(queryMethod.isCollectionQuery).isTrue() } + + @Test // GH-4772 + internal fun `should consider suspended update queries`() { + + val method = PersonRepository::class.java.getMethod("findAndIncrementAgeByName", String::class.java, Continuation::class.java) + val queryMethod = ReactiveMongoQueryMethod(method, DefaultRepositoryMetadata(PersonRepository::class.java), projectionFactory, MongoMappingContext()) + + assertThatNoException().isThrownBy { queryMethod.verify() } + } }