sql >> Databasteknik >  >> RDS >> Mysql

använder mysql ordning efter fall i vilolägeskriterier

Jag tror att jag hittat en lösning.

Till slut skapade jag min egen underklass av Order och åsidosatte den offentliga String toSqlString(Criteria,CriteriaQuery)-metoden:

@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();
}

det viktiga anropet (som jag hittade i den ursprungliga implementeringen av orderklassen) är

criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());

Vilket gav mig tillgång till aliaset för den kolumn jag ville beställa om att använda fallutlåtandet.

Om någon annan tittar på detta, om du beställer på en egenskap som inte finns på rotobjektet, se till att du använder alias i dina villkorskopplingar och att du sedan refererar till dessa alias korrekt i ditt anpassade Order propertyName när du instansiera det.



  1. SailsJS och mySQL anpassade ID-namn fungerar inte med blå utskrifter

  2. Snabbaste sättet att iterera genom stora tabeller med JDBC

  3. MySQL:Hitta saknade datum mellan ett datumintervall

  4. Hadoop och MySQL-integration