86
86
import org .hibernate .type .internal .ConvertedBasicTypeImpl ;
87
87
import org .hibernate .type .spi .TypeConfiguration ;
88
88
89
+ import static java .util .stream .Collectors .toList ;
89
90
import static org .hibernate .internal .util .NullnessUtil .castNonNull ;
90
91
import static org .hibernate .query .sqm .tree .jpa .ParameterCollector .collectParameters ;
91
92
@@ -220,12 +221,7 @@ public static List<NavigablePath> getGroupByNavigablePaths(SqmQuerySpec<?> query
220
221
return Collections .emptyList ();
221
222
}
222
223
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 );
229
225
}
230
226
231
227
public static List <NavigablePath > getOrderByNavigablePaths (SqmQuerySpec <?> querySpec ) {
@@ -234,11 +230,26 @@ public static List<NavigablePath> getOrderByNavigablePaths(SqmQuerySpec<?> query
234
230
return Collections .emptyList ();
235
231
}
236
232
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 () );
239
242
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
+ }
242
253
}
243
254
return navigablePaths ;
244
255
}
0 commit comments