Skip to content

Commit 9f40390

Browse files
committed
Fix method return for delete execution returning primitive numbers.
We now properly check for assignability of numeric values considering primitive types. Closes #4015
1 parent aa90065 commit 9f40390

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaCodeBlocks.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,8 @@ public CodeBlock build() {
706706
builder.addStatement("return ($T) $L", List.class, context.localVariable("resultList"));
707707

708708
} else if (returnCount) {
709-
builder.addStatement("return $T.valueOf($L.size())", methodReturn.getActualClassName(),
709+
builder.addStatement("return $T.valueOf($L.size())",
710+
ClassUtils.resolvePrimitiveIfNecessary(methodReturn.getActualReturnClass()),
710711
context.localVariable("resultList"));
711712
} else {
712713

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,9 +405,10 @@ public DeleteExecution(EntityManager em) {
405405

406406
Query query = jpaQuery.createQuery(accessor);
407407
List<?> resultList = query.getResultList();
408+
Class<?> returnType = jpaQuery.getQueryMethod().getReturnType();
408409

409-
boolean simpleBatch = Number.class.isAssignableFrom(jpaQuery.getQueryMethod().getReturnType())
410-
|| org.springframework.data.util.ReflectionUtils.isVoid(jpaQuery.getQueryMethod().getReturnType());
410+
boolean simpleBatch = ClassUtils.isAssignable(Number.class, returnType)
411+
|| org.springframework.data.util.ReflectionUtils.isVoid(returnType);
411412
boolean collectionQuery = jpaQuery.getQueryMethod().isCollectionQuery();
412413

413414
if (!simpleBatch && !collectionQuery) {

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1623,12 +1623,21 @@ void deleteByShouldRemoveElementsMatchingDerivedQuery() {
16231623
assertThat(repository.countByLastname(firstUser.getLastname())).isZero();
16241624
}
16251625

1626-
@Test // DATAJPA-460
1626+
@Test // DATAJPA-460, GH-4015
16271627
void deleteByShouldReturnNumberOfEntitiesRemovedIfReturnTypeIsLong() {
16281628

16291629
flushTestUsers();
16301630

16311631
assertThat(repository.removeByLastname(firstUser.getLastname())).isOne();
1632+
assertThat(repository.removeOneByLastname(secondUser.getLastname())).isOne();
1633+
}
1634+
1635+
@Test // GH-4015
1636+
void deleteByShouldReturnNumberOfEntitiesRemovedIfReturnTypeIsInt() {
1637+
1638+
flushTestUsers();
1639+
1640+
assertThat(repository.removeOneMoreByLastname(secondUser.getLastname())).isOne();
16321641
}
16331642

16341643
@Test // DATAJPA-460

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,10 @@ Window<User> findTop3ByFirstnameStartingWithOrderByFirstnameAscEmailAddressAsc(S
299299
// DATAJPA-460
300300
Long removeByLastname(String lastname);
301301

302+
long removeOneByLastname(String lastname);
303+
304+
int removeOneMoreByLastname(String lastname);
305+
302306
// DATAJPA-460
303307
List<User> deleteByLastname(String lastname);
304308

0 commit comments

Comments
 (0)