Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

हाइबरनेट मानदंड में मामले के अनुसार mysql ऑर्डर का उपयोग करना

मुझे लगता है कि मुझे एक समाधान मिल गया है।

अंत में मैंने ऑर्डर का अपना उपवर्ग बनाया और सार्वजनिक स्ट्रिंग 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());

जिसने मुझे उस कॉलम के उपनाम तक पहुंच प्रदान की जिसे मैं केस स्टेटमेंट का उपयोग करने के लिए ऑर्डर करना चाहता था।

यदि कोई अन्य इसे देख रहा है, यदि आप किसी ऐसी संपत्ति पर ऑर्डर कर रहे हैं जो रूट ऑब्जेक्ट पर नहीं है, तो सुनिश्चित करें कि आप अपने मानदंड में उपनामों का उपयोग करते हैं और आप अपने कस्टम ऑर्डर प्रॉपर्टीनाम में उन उपनामों को सही ढंग से संदर्भित करते हैं जब आप इसे तुरंत करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:LIKE ऑपरेटर में एस्केपिंग काम क्यों नहीं कर रहा है?

  2. mysql-कनेक्टर-अजगर 2.0.1-1 python-mysql.connector के साथ संघर्ष

  3. RMySQL सिस्टम त्रुटि:10060

  4. MySQL CONCAT(string,longtext) परिणाम हेक्स स्ट्रिंग में होता है

  5. तालिका में पदानुक्रमित डेटा के सभी चाइल्ड नोड्स की गणना करें