Drop FETCH from JOIN clauses when creating a count query in Hibernate.
Resolves #2348. Supercedes #2686.
This commit is contained in:
committed by
Jens Schauder
parent
8121a5429d
commit
e300bd89dd
@@ -276,6 +276,29 @@ class HqlQueryTransformer extends HqlQueryRenderer {
|
||||
return tokens;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<JpaQueryParsingToken> visitJoin(HqlParser.JoinContext ctx) {
|
||||
|
||||
List<JpaQueryParsingToken> 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<JpaQueryParsingToken> visitAlias(HqlParser.AliasContext ctx) {
|
||||
|
||||
|
||||
@@ -903,6 +903,16 @@ class HqlQueryTransformerTests {
|
||||
}
|
||||
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user