Saya rasa saya menemukan solusi.
Pada akhirnya saya membuat subkelas Order saya sendiri dan mengesampingkan metode String toSqlString(Criteria,CriteriaQuery) publik:
@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();
}
panggilan penting (yang saya temukan dalam implementasi asli dari kelas pesanan) adalah
criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());
Yang memberi saya akses ke alias untuk kolom yang ingin saya pesan menggunakan pernyataan kasus.
Jika ada orang lain yang melihat ini, jika Anda memesan pada properti yang tidak berada di objek root, maka pastikan Anda menggunakan alias dalam gabungan kriteria Anda dan bahwa Anda kemudian mereferensikan alias tersebut dengan benar di Nama properti Pesanan kustom Anda saat Anda buat contoh itu.