1212import org .hibernate .query .criteria .JpaCteCriteriaAttribute ;
1313import org .hibernate .query .criteria .JpaCteCriteriaType ;
1414import org .hibernate .query .sqm .SqmBindableType ;
15+ import org .hibernate .query .sqm .tree .select .SqmSelectClause ;
1516import org .hibernate .query .sqm .tuple .internal .AnonymousTupleSimpleSqmPathSource ;
1617import org .hibernate .query .sqm .tuple .internal .AnonymousTupleType ;
1718import org .hibernate .query .sqm .tuple .internal .CteTupleTableGroupProducer ;
@@ -34,13 +35,14 @@ public class SqmCteTable<T> extends AnonymousTupleType<T> implements JpaCteCrite
3435 private SqmCteTable (
3536 String name ,
3637 SqmCteStatement <T > cteStatement ,
37- SqmSelectableNode <?>[] sqmSelectableNodes ) {
38- super ( sqmSelectableNodes );
38+ SqmSelectableNode <?>[] sqmSelectableNodes ,
39+ List <String > aliases ) {
40+ super ( sqmSelectableNodes , aliases );
3941 this .name = name ;
4042 this .cteStatement = cteStatement ;
4143 final List <SqmCteTableColumn > columns = new ArrayList <>( componentCount () );
4244 for ( int i = 0 ; i < componentCount (); i ++ ) {
43- columns .add ( new SqmCteTableColumn ( this , getComponentName (i ), get (i ) ) );
45+ columns .add ( new SqmCteTableColumn ( this , aliases . get (i ), get (i ) ) );
4446 }
4547 this .columns = columns ;
4648 }
@@ -49,12 +51,20 @@ public static <X> SqmCteTable<X> createStatementTable(
4951 String name ,
5052 SqmCteStatement <X > cteStatement ,
5153 SqmSelectQuery <X > selectStatement ) {
52- final SqmSelectableNode <?>[] sqmSelectableNodes = selectStatement .getQueryPart ()
54+ final SqmSelectClause selectClause = selectStatement .getQueryPart ()
5355 .getFirstQuerySpec ()
54- .getSelectClause ()
56+ .getSelectClause ();
57+ final SqmSelectableNode <?>[] sqmSelectableNodes = selectClause
5558 .getSelectionItems ()
5659 .toArray ( SqmSelectableNode []::new );
57- return new SqmCteTable <>( name , cteStatement , sqmSelectableNodes );
60+ final var aliases = new ArrayList <String >();
61+ for (final var selection : selectClause .getSelections ()) {
62+ final var alias = selection .getAlias ();
63+ selection .getSelectableNode ().visitSubSelectableNodes ( node ->
64+ aliases .add ( alias == null ? node .getAlias () : alias )
65+ );
66+ }
67+ return new SqmCteTable <>( name , cteStatement , sqmSelectableNodes , aliases );
5868 }
5969
6070 @ Override
0 commit comments