Yes, I know, technically HQL doesn’t support derived tables or columns.  However, you can count on the underlying SQL to do some of the work for you.

For example if you needed to order by any of 3 columns in left joined tables, depending on whether the join worked or not you could do something like:

select distinct t1,
case when t2.t2Id is null
then
(case when t3.t3Id is null
then t1.orderingColumn
else t3.orderingColumn
end)
else t2.orderingColumn
end
from table1 t1
left join t1.t2s t2
left join t1.t3s t3
order by 2, t1.description

This builds on allowing case in the select clause (thereby giving you your pseudo-derived column) and the result order number (2) which falls directly back to the underlying SQL.