Skip to content

Commit d90d054

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 3f8a8cd commit d90d054

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

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
@@ -296,9 +296,10 @@ public DeleteExecution(EntityManager em) {
296296

297297
Query query = jpaQuery.createQuery(accessor);
298298
List<?> resultList = query.getResultList();
299+
Class<?> returnType = jpaQuery.getQueryMethod().getReturnType();
299300

300-
boolean simpleBatch = Number.class.isAssignableFrom(jpaQuery.getQueryMethod().getReturnType())
301-
|| org.springframework.data.util.ReflectionUtils.isVoid(jpaQuery.getQueryMethod().getReturnType());
301+
boolean simpleBatch = ClassUtils.isAssignable(Number.class, returnType)
302+
|| org.springframework.data.util.ReflectionUtils.isVoid(returnType);
302303
boolean collectionQuery = jpaQuery.getQueryMethod().isCollectionQuery();
303304

304305
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
@@ -1598,12 +1598,21 @@ void deleteByShouldRemoveElementsMatchingDerivedQuery() {
15981598
assertThat(repository.countByLastname(firstUser.getLastname())).isZero();
15991599
}
16001600

1601-
@Test // DATAJPA-460
1601+
@Test // DATAJPA-460, GH-4015
16021602
void deleteByShouldReturnNumberOfEntitiesRemovedIfReturnTypeIsLong() {
16031603

16041604
flushTestUsers();
16051605

16061606
assertThat(repository.removeByLastname(firstUser.getLastname())).isOne();
1607+
assertThat(repository.removeOneByLastname(secondUser.getLastname())).isOne();
1608+
}
1609+
1610+
@Test // GH-4015
1611+
void deleteByShouldReturnNumberOfEntitiesRemovedIfReturnTypeIsInt() {
1612+
1613+
flushTestUsers();
1614+
1615+
assertThat(repository.removeOneMoreByLastname(secondUser.getLastname())).isOne();
16071616
}
16081617

16091618
@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
@@ -296,6 +296,10 @@ Window<User> findTop3ByFirstnameStartingWithOrderByFirstnameAscEmailAddressAsc(S
296296
// DATAJPA-460
297297
Long removeByLastname(String lastname);
298298

299+
long removeOneByLastname(String lastname);
300+
301+
int removeOneMoreByLastname(String lastname);
302+
299303
// DATAJPA-460
300304
List<User> deleteByLastname(String lastname);
301305

0 commit comments

Comments
 (0)