Mysql
 sql >> Baza danych >  >> RDS >> Mysql

przy użyciu mysql kolejność według przypadków w kryteriach hibernacji

Myślę, że znalazłem rozwiązanie.

W końcu stworzyłem własną podklasę Order i nadpisałem publiczną metodę 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();
}

ważne wywołanie (które znalazłem w oryginalnej implementacji klasy order) to

criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());

Co dało mi dostęp do aliasu kolumny, którą chciałem zamówić za pomocą instrukcji przypadku.

Jeśli ktoś inny patrzy na to, jeśli składasz zamówienie na właściwości, która nie znajduje się w obiekcie głównym, upewnij się, że używasz aliasów w sprzężeniach kryteriów i że następnie odwołujesz się do tych aliasów poprawnie w niestandardowej nazwie właściwości Order podczas utworzyć jego instancję.



  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:Wstawianie tradycyjnego i uproszczonego chińskiego w tej samej „komórce”

  2. MySQL GROUP WEDŁUG przedziału wiekowego, w tym przedziałów null

  3. dostęp do mysql na hoście z wirtualnej skrzynki gościa

  4. zapytanie mysql, aby znaleźć wszystkie możliwe kombinacje zaczynające się od i kończące się na (duplikat uproszczony)

  5. Jak zainstalować MySQL w systemie Windows