Skip to content

Commit 811266f

Browse files
committed
Polishing.
Align assignability check for modifying execution. See #4015
1 parent 9f40390 commit 811266f

File tree

2 files changed

+5
-11
lines changed

2 files changed

+5
-11
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryExecution.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -352,12 +352,11 @@ public ModifyingExecution(JpaQueryMethod method, EntityManager em) {
352352

353353
Class<?> returnType = method.getReturnType();
354354

355-
boolean isVoid = ClassUtils.isAssignable(returnType, Void.class);
356-
boolean isInt = ClassUtils.isAssignable(returnType, Integer.class);
357-
boolean isLong = ClassUtils.isAssignable(returnType, Long.class);
355+
boolean isVoid = org.springframework.data.util.ReflectionUtils.isVoid(returnType);
356+
boolean isNumber = ClassUtils.isAssignable(Number.class, returnType);
358357

359-
Assert.isTrue(isInt || isLong || isVoid,
360-
"Modifying queries can only use void or int/Integer as return type; Offending method: " + method);
358+
Assert.isTrue(isNumber || isVoid,
359+
"Modifying queries can only use void, int/Integer, or long/Long as return type; Offending method: " + method);
361360

362361
this.em = em;
363362
this.flush = method.getFlushAutomatically();
@@ -377,10 +376,6 @@ protected Object doExecute(AbstractJpaQuery query, JpaParametersParameterAccesso
377376
em.clear();
378377
}
379378

380-
if (ClassUtils.isAssignable(method.getReturnType(), Long.class)) {
381-
return (long) result;
382-
}
383-
384379
return result;
385380
}
386381
}

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpaQueryExecutionUnitTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import jakarta.persistence.TypedQuery;
2525

2626
import java.lang.reflect.Method;
27-
import java.math.BigDecimal;
2827
import java.util.Arrays;
2928
import java.util.Collections;
3029
import java.util.Optional;
@@ -171,7 +170,7 @@ void allowsMethodReturnTypesForModifyingQuery() {
171170
@Test
172171
void modifyingExecutionRejectsNonIntegerOrVoidReturnType() {
173172

174-
when(method.getReturnType()).thenReturn((Class) BigDecimal.class);
173+
when(method.getReturnType()).thenReturn((Class) String.class);
175174
assertThatIllegalArgumentException().isThrownBy(() -> new ModifyingExecution(method, em));
176175
}
177176

0 commit comments

Comments
 (0)