sql >> Database teknologi >  >> RDS >> Mysql

ved hjælp af mysql rækkefølge efter sag i dvalekriterier

Jeg tror, ​​jeg har fundet en løsning.

Til sidst oprettede jeg min egen underklasse af Order og tilsidesatte den offentlige String toSqlString(Criteria,CriteriaQuery) metode:

@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 vigtige kald (som jeg fandt i den oprindelige implementering af ordreklassen) er

criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());

Hvilket gav mig adgang til aliaset for den spalte, jeg ønskede at bestille ved brug af sagsfremstillingen.

Hvis nogen andre ser på dette, hvis du bestiller på en egenskab, der ikke er på rodobjektet, så sørg for, at du bruger aliaser i dine kriteriesammenføjninger, og at du derefter refererer til disse aliasser korrekt i din tilpassede ordreegenskabsnavn, når du instansiere det.



  1. Kunne ikke indlæse filen eller assembly 'MySql.Data, Version=6.2.2.0

  2. SQL-standard UPSERT-kald

  3. Fix:"den førende præcision af intervallet er for lille" i Oracle Database

  4. Mysql:resultater fra de sidste syv dage