diff --git a/pom.xml b/pom.xml
index ca8ee5b81e..eca6f44c01 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-jpa-parent
- 3.0.0-SNAPSHOT
+ 3.0.0-gh-2054-SNAPSHOT
pom
Spring Data JPA Parent
diff --git a/spring-data-envers/pom.xml b/spring-data-envers/pom.xml
index 8e2de43f59..7d13dd251b 100755
--- a/spring-data-envers/pom.xml
+++ b/spring-data-envers/pom.xml
@@ -5,12 +5,12 @@
org.springframework.data
spring-data-envers
- 3.0.0-SNAPSHOT
+ 3.0.0-gh-2054-SNAPSHOT
org.springframework.data
spring-data-jpa-parent
- 3.0.0-SNAPSHOT
+ 3.0.0-gh-2054-SNAPSHOT
../pom.xml
diff --git a/spring-data-jpa-distribution/pom.xml b/spring-data-jpa-distribution/pom.xml
index bba8571672..195ae84b60 100644
--- a/spring-data-jpa-distribution/pom.xml
+++ b/spring-data-jpa-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-jpa-parent
- 3.0.0-SNAPSHOT
+ 3.0.0-gh-2054-SNAPSHOT
../pom.xml
diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml
index ba9220cc2a..34640acd65 100644
--- a/spring-data-jpa/pom.xml
+++ b/spring-data-jpa/pom.xml
@@ -6,7 +6,7 @@
org.springframework.data
spring-data-jpa
- 3.0.0-SNAPSHOT
+ 3.0.0-gh-2054-SNAPSHOT
Spring Data JPA
Spring Data module for JPA repositories.
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-jpa-parent
- 3.0.0-SNAPSHOT
+ 3.0.0-gh-2054-SNAPSHOT
../pom.xml
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 4dd01244fb..0da11e318b 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
@@ -308,6 +308,13 @@ protected QueryHints getQueryHints() {
return metadata == null ? NoHints.INSTANCE : DefaultQueryHints.of(entityInformation, metadata);
}
+ /**
+ * Returns {@link QueryHints} with the query hints on the current {@link CrudMethodMetadata} for count queries.
+ */
+ protected QueryHints getQueryHintsForCount() {
+ return metadata == null ? NoHints.INSTANCE : DefaultQueryHints.of(entityInformation, metadata).forCounts();
+ }
+
@Deprecated
@Override
public T getOne(ID id) {
@@ -749,7 +756,7 @@ protected TypedQuery getCountQuery(@Nullable Specification 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 cc69535d33..ebbc549041 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 @@
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.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 @@ void doNothingWhenNonExistentInstanceGetsDeleted() {
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();
+ }
}