2016-04-04 10 views
0

Ich brauche meine DynamicQuery durch die Anzahl der Tage auf einem DateTimeColumn (Kontakt_ Tabelle durch die Art und Weise)Gewohnheit OrderByComparator Tag Datetime

der Standard zu bestellen orderByComparator bringen:

1969/04/02 
1970/04/01 
1970/04/01 
1970/04/11 

aber ich brauche

1970/04/01 
1970/04/01 
1969/04/02 
1970/04/11 

ich versuchte OrderByComparator zwingende und dann mit ihm auf meinem dynamicQuery() -Methode, funktioniert aber nicht

Ich habe versucht, OrderByComparatorFactory selbst zu implementieren, aber meine Vergleichsmethode heißt nicht

Ich kann eine benutzerdefinierte Abfrage verwenden, aber es gibt keinen anderen Weg, es zu tun?

durch die Art und Weise, mit Ich bin ein Suchcontainer

Antwort

0

DynamicQuery nicht Methode von einem OrderByComparator Verfahren vergleichen nicht verwendet. DynamicQuery fügt nur die Felder und asc/desc aus dem OrderByComparator hinzu.

Siehe Liferay Code hier: BasePersistentImpl:

public List findWithDynamicQuery(
     DynamicQuery dynamicQuery, int start, int end, 
     OrderByComparator orderByComparator) 
    throws SystemException { 

    OrderFactoryUtil.addOrderByComparator(dynamicQuery, orderByComparator); 

    return findWithDynamicQuery(dynamicQuery, start, end); 
} 

OrderFactoryUtil:

public static void addOrderByComparator(
    DynamicQuery dynamicQuery, OrderByComparator obc) { 

    if (obc == null) { 
     return; 
    } 

    String[] orderByFields = obc.getOrderByFields(); 

    for (String orderByField : orderByFields) { 
     if (obc.isAscending(orderByField)) { 
      dynamicQuery.addOrder(asc(orderByField)); 
     } 
     else { 
      dynamicQuery.addOrder(desc(orderByField)); 
     } 
    } 
} 

Sie können die Ergebnisliste von Ihren Komparator sortieren, wie ich es in diesem Beispiel tat:

github