Non so se è ancora pertinente, ma esiste un'implementazione nei dati di primavera jpa per eseguire la conversione tra un oggetto data.domain.Sort (Spring JPA) a un OrderSpecifier (QueryDSL).
GIT Source of Querydsl Support in Spring JPA
E 'davvero brutto attuazione, ma si poteva ancora riutilizzarlo per il proprio scopo, come il metodo è privato:
public JPQLQuery applySorting(Sort sort, JPQLQuery query)
Ma se si utilizza JPA i dati di primavera, l'implementazione repository personalizzati , devi solo fare:
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;
}
Spero che possa essere d'aiuto!
contrassegnato come risposta, come la mia domanda è stato risposto e mi è venuto alla stessa soluzione, tranne usando MyClass.class invece di Object.class. Tuttavia come faccio a farlo in un modo generico, ad esempio MyClass è in realtà? –
È necessario riutilizzare orderByExpression, poiché è un genitore comune per l'ordine in base ai figli. Anche il nome è fuorviante, poiché i bambini sono l'effettivo "ordine per espressioni". –
Questo tipo di opere per il mio caso, ma non completamente. Il problema è che ho bisogno di ordinare i campi calcolati (somma, conteggio). Li ho come alias ma il problema è che PathBuilder si aggiunge sempre alla query "alias". + proprietà. Nell'esempio restituisce sempre "ORDER BY object. {Alias}" che non è valido. Come posso ottenere che QueryDSL aggiunga semplicemente "ORDER BY {alias}"? – Cenobyte321