Ich weiß nicht, ob es ist immer noch relevant, aber es gibt eine Implementierung im Spring-Daten-jpa, um die Konvertierung zwischen einem data.domain.Sort (Spring JPA) -Objekt zu einem OrderSpecifier (QueryDSL) durchzuführen.
GIT Source of Querydsl Support in Spring JPA
Es ist wirklich hässlich Implementierung, aber man könnte es noch für eigene Zwecke wiederverwenden wie die Methode privat ist:
public JPQLQuery applySorting(Sort sort, JPQLQuery query)
Aber wenn Sie Frühling Daten JPA verwenden, in Ihrer benutzerdefinierten Repository Implementierung , müssen Sie nur tun:
public Page<MyObject> findAll(Predicate predicate, Pageable pageable) {
QMyObject myObject = QMyObject.myObject;
JPQLQuery jPQLQuery = from(myObject)
.join(myObject.user)
.where(predicate);
jPQLQuery = getQuerydsl().applyPagination(pageable, jPQLQuery);
List<MyObject> myObjectList = jPQLQuery.list(myObject);
long count = jPQLQuery.count();
Page<MyObject> myObjectPage = new PageImpl<MyObject>(myObjectList, pageable, count);
return myObjectPage;
}
Ich hoffe, es könnte helfen!
als Antwort markiert als meine Frage beantwortet wurde und ich kam zu der gleichen Lösung außer MyClass.class statt Object.class verwenden. Wie aber mache ich das generisch, zB MyClass ist eigentlich? –
Sie sollten den Befehl orderByExpression erneut verwenden, da es sich um einen gemeinsamen übergeordneten Code für die Reihenfolge von untergeordneten Elementen handelt. Auch der Name ist irreführend, da die Kinder die eigentliche "Ordnung durch Ausdrücke" sind. –
Diese Art von Arbeiten für meinen Fall, aber nicht vollständig. Das Problem ist, dass ich berechnete Felder (Summe, Anzahl) sortieren muss. Ich habe sie als Aliase, aber das Problem ist der PathBuilder hängt immer an die Abfrage "Alias". + Eigenschaft. Im Beispiel wird immer "ORDER BY Objekt. {Alias}" zurückgegeben, was ungültig ist. Wie kann ich QueryDSL dazu bringen, einfach "ORDER BY {alias}" anzuhängen? – Cenobyte321