80
80
import org .hibernate .type .internal .ConvertedBasicTypeImpl ;
81
81
import org .hibernate .type .spi .TypeConfiguration ;
82
82
83
+ import static java .util .stream .Collectors .toList ;
83
84
import static org .hibernate .internal .util .NullnessUtil .castNonNull ;
84
85
import static org .hibernate .query .sqm .tree .jpa .ParameterCollector .collectParameters ;
85
86
@@ -214,12 +215,7 @@ public static List<NavigablePath> getGroupByNavigablePaths(SqmQuerySpec<?> query
214
215
return Collections .emptyList ();
215
216
}
216
217
217
- final List <NavigablePath > navigablePaths = new ArrayList <>( expressions .size () );
218
- final SqmPathVisitor pathVisitor = new SqmPathVisitor ( path -> navigablePaths .add ( path .getNavigablePath () ) );
219
- for ( SqmExpression <?> expression : expressions ) {
220
- expression .accept ( pathVisitor );
221
- }
222
- return navigablePaths ;
218
+ return collectNavigablePaths ( expressions );
223
219
}
224
220
225
221
public static List <NavigablePath > getOrderByNavigablePaths (SqmQuerySpec <?> querySpec ) {
@@ -228,11 +224,26 @@ public static List<NavigablePath> getOrderByNavigablePaths(SqmQuerySpec<?> query
228
224
return Collections .emptyList ();
229
225
}
230
226
231
- final List <SqmSortSpecification > sortSpecifications = order .getSortSpecifications ();
232
- final List <NavigablePath > navigablePaths = new ArrayList <>( sortSpecifications .size () );
227
+ final List <SqmExpression <?>> expressions = order .getSortSpecifications ()
228
+ .stream ()
229
+ .map ( SqmSortSpecification ::getSortExpression )
230
+ .collect ( toList () );
231
+ return collectNavigablePaths ( expressions );
232
+ }
233
+
234
+ private static List <NavigablePath > collectNavigablePaths (final List <SqmExpression <?>> expressions ) {
235
+ final List <NavigablePath > navigablePaths = new ArrayList <>( expressions .size () );
233
236
final SqmPathVisitor pathVisitor = new SqmPathVisitor ( path -> navigablePaths .add ( path .getNavigablePath () ) );
234
- for ( SqmSortSpecification sortSpec : sortSpecifications ) {
235
- sortSpec .getSortExpression ().accept ( pathVisitor );
237
+ for ( final SqmExpression <?> expression : expressions ) {
238
+ if ( expression instanceof SqmAliasedNodeRef ) {
239
+ final NavigablePath navigablePath = ( (SqmAliasedNodeRef ) expression ).getNavigablePath ();
240
+ if ( navigablePath != null ) {
241
+ navigablePaths .add ( navigablePath );
242
+ }
243
+ }
244
+ else {
245
+ expression .accept ( pathVisitor );
246
+ }
236
247
}
237
248
return navigablePaths ;
238
249
}
0 commit comments