From 9f46bc713df0f55dc61e2c50e100b60bbb6b1088 Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Wed, 22 Mar 2023 10:18:11 -0500 Subject: [PATCH 1/2] Create new branch. --- pom.xml | 2 +- spring-data-envers/pom.xml | 4 ++-- spring-data-jpa-distribution/pom.xml | 2 +- spring-data-jpa/pom.xml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index c77686453f..692183f4c1 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-jpa-parent - 3.1.0-SNAPSHOT + 3.1.0-gh-2348-SNAPSHOT pom Spring Data JPA Parent diff --git a/spring-data-envers/pom.xml b/spring-data-envers/pom.xml index db915d7c3b..449f0a05f3 100755 --- a/spring-data-envers/pom.xml +++ b/spring-data-envers/pom.xml @@ -5,12 +5,12 @@ org.springframework.data spring-data-envers - 3.1.0-SNAPSHOT + 3.1.0-gh-2348-SNAPSHOT org.springframework.data spring-data-jpa-parent - 3.1.0-SNAPSHOT + 3.1.0-gh-2348-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa-distribution/pom.xml b/spring-data-jpa-distribution/pom.xml index a5cb2f09b5..62a1fe834a 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.1.0-SNAPSHOT + 3.1.0-gh-2348-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml index 27313e9e3c..1d3df56cf0 100644 --- a/spring-data-jpa/pom.xml +++ b/spring-data-jpa/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-jpa - 3.1.0-SNAPSHOT + 3.1.0-gh-2348-SNAPSHOT Spring Data JPA Spring Data module for JPA repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-jpa-parent - 3.1.0-SNAPSHOT + 3.1.0-gh-2348-SNAPSHOT ../pom.xml From f8c4885c0cea5bfb61201dac65d0a407ab15b29d Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Wed, 22 Mar 2023 10:24:54 -0500 Subject: [PATCH 2/2] Drop FETCH from JOIN clauses when creating a count query in Hibernate. Resolves #2348. Supercedes #2686. --- .../repository/query/HqlQueryTransformer.java | 23 +++++++++++++++++++ .../query/HqlQueryTransformerTests.java | 10 ++++++++ 2 files changed, 33 insertions(+) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java index dbb0f91558..9939f4d0c3 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java @@ -265,6 +265,29 @@ public List visitFromRoot(HqlParser.FromRootContext ctx) { return tokens; } + @Override + public List visitJoin(HqlParser.JoinContext ctx) { + + List tokens = new ArrayList<>(); + + tokens.addAll(visit(ctx.joinType())); + tokens.add(new JpaQueryParsingToken(ctx.JOIN())); + + if (!countQuery) { + if (ctx.FETCH() != null) { + tokens.add(new JpaQueryParsingToken(ctx.FETCH())); + } + } + + tokens.addAll(visit(ctx.joinTarget())); + + if (ctx.joinRestriction() != null) { + tokens.addAll(visit(ctx.joinRestriction())); + } + + return tokens; + } + @Override public List visitAlias(HqlParser.AliasContext ctx) { diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java index d6050091df..9fc6b5ebbf 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java @@ -793,6 +793,16 @@ void sortProperlyAppendsToExistingOrderByWithFunction() { "select e from SampleEntity e where function('nativeFunc', ?1) > 'testVal' order by function('nativeFunc', ?1), e.age desc"); } + @Test // GH-2348 + void removeFetchFromJoinsDuringCountQueryCreation() { + + assertCountQuery("select u from User u left outer join fetch u.roles r left outer JOIN FETCH u.accounts a", + "select count(u) from User u left outer join u.roles r left outer JOIN u.accounts a"); + + assertCountQuery("SELECT DISTINCT b FROM Board b LEFT JOIN FETCH b.comments ORDER BY b.id", + "SELECT count(DISTINCT b) FROM Board b LEFT JOIN b.comments"); + } + private void assertCountQuery(String originalQuery, String countQuery) { assertThat(createCountQueryFor(originalQuery)).isEqualTo(countQuery); }