मुझे लगता है कि मुझे एक समाधान मिल गया है।
अंत में मैंने ऑर्डर का अपना उपवर्ग बनाया और सार्वजनिक स्ट्रिंग toSqlString (मानदंड, मानदंड) विधि को ओवरराइड किया:
@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();
}
महत्वपूर्ण कॉल (जो मुझे ऑर्डर क्लास के मूल कार्यान्वयन में मिली) है
criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());
जिसने मुझे उस कॉलम के उपनाम तक पहुंच प्रदान की जिसे मैं केस स्टेटमेंट का उपयोग करने के लिए ऑर्डर करना चाहता था।
यदि कोई अन्य इसे देख रहा है, यदि आप किसी ऐसी संपत्ति पर ऑर्डर कर रहे हैं जो रूट ऑब्जेक्ट पर नहीं है, तो सुनिश्चित करें कि आप अपने मानदंड में उपनामों का उपयोग करते हैं और आप अपने कस्टम ऑर्डर प्रॉपर्टीनाम में उन उपनामों को सही ढंग से संदर्भित करते हैं जब आप इसे तुरंत करें।