Mysql
 sql >> база данни >  >> RDS >> Mysql

използвайки mysql подреждане по случай в критерии за хибернация

Мисля, че намерих решение.

В крайна сметка създадох свой собствен подклас на Order и замених публичния 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();
}

важното извикване (което намерих в оригиналната реализация на класа order) е

criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());

Което ми даде достъп до псевдонима за колоната, която исках да поръчам при използване на оператора case.

Ако някой друг гледа това, ако поръчвате на свойство, което не е в основния обект, тогава се уверете, че използвате псевдоними във вашите критерии за присъединяване и че след това правите позоваване на тези псевдоними правилно във вашата персонализирана поръчка propertyName, когато инстанцирайте го.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Следвайте дизайна на таблицата с потребителска база данни

  2. Mysql как да връща редове, дори ако данните за присъединяване са празни

  3. SQL Server предлага ли нещо като MySQL ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ

  4. SOLR DataImport Грешка Не може да се изпълни заявка

  5. Можете ли да използвате MySQL заявка, за да създадете напълно копие на базата данни