sql >> Database >  >> RDS >> Mysql

mysql per geval gebruiken in slaapstandcriteria

Ik denk dat ik een oplossing heb gevonden.

Uiteindelijk heb ik mijn eigen subklasse van Order gemaakt en de openbare methode String toSqlString(Criteria,CriteriaQuery) overschreven:

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

de belangrijke oproep (die ik vond in de oorspronkelijke implementatie van de orderklasse) is de

criteriaQuery.getColumnsUsingProjection(criteria, getPropertyName());

Dat gaf me toegang tot de alias voor de kolom die ik wilde bestellen met behulp van de case-statement.

Als iemand anders hiernaar kijkt, als u bestelt op een eigenschap die niet op het hoofdobject staat, zorg er dan voor dat u aliassen gebruikt in uw criteria-joins en dat u vervolgens correct naar die aliassen verwijst in uw aangepaste Order propertyName wanneer u instantiëren.



  1. mysql-gegevenstype om alleen maand en jaar op te slaan

  2. Mysql Time-type geeft een ArgumentError:argument buiten bereik in Rails indien langer dan 24 uur

  3. SQLite-datum en tijd

  4. Hoe een vergelijkbare waarde in Oracle te krijgen?