Myślę, że znalazłem rozwiązanie.
W końcu stworzyłem własną podklasę Order i nadpisałem publiczną metodę String toSqlString(Criteria,CriteriaQuery):
@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) {
final String[] columns = criteriaQuery.getColumnsUsingProjection( criteria, getPropertyName() );
final StringBuilder fragment = new StringBuilder();
fragment.append(" case ").append(columns[0]);
fragment.append(" when 'pending' then 1 ");
fragment.append(" when 'approved' then 1 ");
fragment.append(" else 2 end");
return fragment.toString();
}
ważne wywołanie (które znalazłem w oryginalnej implementacji klasy order) to
criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());
Co dało mi dostęp do aliasu kolumny, którą chciałem zamówić za pomocą instrukcji przypadku.
Jeśli ktoś inny patrzy na to, jeśli składasz zamówienie na właściwości, która nie znajduje się w obiekcie głównym, upewnij się, że używasz aliasów w sprzężeniach kryteriów i że następnie odwołujesz się do tych aliasów poprawnie w niestandardowej nazwie właściwości Order podczas utworzyć jego instancję.