diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java index d47fd9883..9f4552d96 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java @@ -309,6 +309,13 @@ public class SimpleJpaRepository implements JpaRepositoryImplementation implements JpaRepositoryImplementation implements JpaRepositoryImplementation TypedQuery applyRepositoryMethodMetadataForCount(TypedQuery query) { + + if (metadata == null) { + return query; + } + + applyQueryHintsForCount(query); + + return query; + } + + private void applyQueryHintsForCount(Query query) { + getQueryHintsForCount().forEach(query::setHint); + } + /** * Executes a count query and transparently sums up all values returned. * diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java index cc69535d3..ebbc54904 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/SimpleJpaRepositoryUnitTests.java @@ -18,9 +18,7 @@ package org.springframework.data.jpa.repository.support; import static java.util.Collections.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; - -import java.util.Arrays; -import java.util.Optional; +import static org.springframework.data.jpa.domain.Specification.*; import jakarta.persistence.EntityGraph; import jakarta.persistence.EntityManager; @@ -28,6 +26,9 @@ import jakarta.persistence.TypedQuery; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; +import java.util.Arrays; +import java.util.Optional; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -192,4 +193,14 @@ class SimpleJpaRepositoryUnitTests { verify(em, never()).remove(newUser); verify(em, never()).merge(newUser); } + + @Test // GH-2054 + void applyQueryHintsToCountQueriesForSpecificationPageables() { + + when(query.getResultList()).thenReturn(Arrays.asList(new User(), new User())); + + repo.findAll(where(null), PageRequest.of(2, 1)); + + verify(metadata).getQueryHintsForCount(); + } }