Ik denk dat ik een oplossing heb gevonden.
Uiteindelijk heb ik mijn eigen subklasse van Order gemaakt en de openbare methode String toSqlString(Criteria,CriteriaQuery) overschreven:
@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();
}
de belangrijke oproep (die ik vond in de oorspronkelijke implementatie van de orderklasse) is de
criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());
Dat gaf me toegang tot de alias voor de kolom die ik wilde bestellen met behulp van de case-statement.
Als iemand anders hiernaar kijkt, als u bestelt op een eigenschap die niet op het hoofdobject staat, zorg er dan voor dat u aliassen gebruikt in uw criteria-joins en dat u vervolgens correct naar die aliassen verwijst in uw aangepaste Order propertyName wanneer u instantiëren.