Skip to content

Commit 3b00a9f

Browse files
committed
HHH-18272 Check for SqmAliasedNodeRef when collecting group/order by
1 parent e57a2ab commit 3b00a9f

File tree

1 file changed

+21
-10
lines changed
  • hibernate-core/src/main/java/org/hibernate/query/sqm/internal

1 file changed

+21
-10
lines changed

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/SqmUtil.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
import org.hibernate.type.internal.ConvertedBasicTypeImpl;
8787
import org.hibernate.type.spi.TypeConfiguration;
8888

89+
import static java.util.stream.Collectors.toList;
8990
import static org.hibernate.internal.util.NullnessUtil.castNonNull;
9091
import static org.hibernate.query.sqm.tree.jpa.ParameterCollector.collectParameters;
9192

@@ -220,12 +221,7 @@ public static List<NavigablePath> getGroupByNavigablePaths(SqmQuerySpec<?> query
220221
return Collections.emptyList();
221222
}
222223

223-
final List<NavigablePath> navigablePaths = new ArrayList<>( expressions.size() );
224-
final SqmPathVisitor pathVisitor = new SqmPathVisitor( path -> navigablePaths.add( path.getNavigablePath() ) );
225-
for ( SqmExpression<?> expression : expressions ) {
226-
expression.accept( pathVisitor );
227-
}
228-
return navigablePaths;
224+
return collectNavigablePaths( expressions );
229225
}
230226

231227
public static List<NavigablePath> getOrderByNavigablePaths(SqmQuerySpec<?> querySpec) {
@@ -234,11 +230,26 @@ public static List<NavigablePath> getOrderByNavigablePaths(SqmQuerySpec<?> query
234230
return Collections.emptyList();
235231
}
236232

237-
final List<SqmSortSpecification> sortSpecifications = order.getSortSpecifications();
238-
final List<NavigablePath> navigablePaths = new ArrayList<>( sortSpecifications.size() );
233+
final List<SqmExpression<?>> expressions = order.getSortSpecifications()
234+
.stream()
235+
.map( SqmSortSpecification::getSortExpression )
236+
.collect( toList() );
237+
return collectNavigablePaths( expressions );
238+
}
239+
240+
private static List<NavigablePath> collectNavigablePaths(final List<SqmExpression<?>> expressions) {
241+
final List<NavigablePath> navigablePaths = new ArrayList<>( expressions.size() );
239242
final SqmPathVisitor pathVisitor = new SqmPathVisitor( path -> navigablePaths.add( path.getNavigablePath() ) );
240-
for ( SqmSortSpecification sortSpec : sortSpecifications ) {
241-
sortSpec.getSortExpression().accept( pathVisitor );
243+
for ( final SqmExpression<?> expression : expressions ) {
244+
if ( expression instanceof SqmAliasedNodeRef ) {
245+
final NavigablePath navigablePath = ( (SqmAliasedNodeRef) expression ).getNavigablePath();
246+
if ( navigablePath != null ) {
247+
navigablePaths.add( navigablePath );
248+
}
249+
}
250+
else {
251+
expression.accept( pathVisitor );
252+
}
242253
}
243254
return navigablePaths;
244255
}

0 commit comments

Comments
 (0)