sql >> Databáze >  >> RDS >> Mysql

pomocí mysql pořadí od případu v kritériích hibernace

Myslím, že jsem našel řešení.

Nakonec jsem vytvořil vlastní podtřídu Order a přepsal jsem veřejnou metodu String na SqlString(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();
}

důležité volání (které jsem našel v původní implementaci třídy order) je

criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());

Což mi umožnilo přístup k aliasu pro sloupec, který jsem chtěl objednat pomocí příkazu case.

Pokud se na to dívá někdo jiný, pokud objednáváte na vlastnosti, která není na kořenovém objektu, ujistěte se, že používáte aliasy ve spojeních kritérií a že pak tyto aliasy správně odkazujete ve své vlastní vlastnosti OrderName, když vytvořte jej.



  1. Přístup k ladění indexu – 2. část

  2. Pokračování transakce po chybě porušení primárního klíče

  3. Chyba SQL nahradit nebo vložit do syntaxe

  4. Zavřít připojení MySQL (PHP)