Domanda

QueryDSL definisce un'interfaccia OrderSpecifier e un'istanza per questo può essere facilmente ottenuta per qualsiasi campo chiamando asc() o desc().L'interfaccia QueryDslPredicateExecutor di DATA GENERALE JPA ha anche un metodo findAll() che richiede OrderSpecifiers come parametri.

org.springframework.data.domain.PageRequest Tuttavia non sa nulla di QueryDSL e ha il suo modo per definire l'ordinamento della query, vale a dire org.springframework.data.domain.Sort.Può contenere un numero di generatori org.springframework.data.domain.Sort.Orders che sono molto simili a OrderSpecifiers, tranne che non sono tipo sicuro ecc.

Allora, se voglio rendere la query dei pagamenti che utilizza l'ordinamento, non c'è davvero un modo di usare querydsl per definire questo?

È stato utile?

Soluzione

Dovrebbe funzionare in questo modo se non riesci a trovare un altro modo

private Sort sortBy(Path<?> path) {
    return new Sort(Sort.Direction.ASC, path.getMetadata().getExpression().toString());
}
.

Altri suggerimenti

So che è passato un po 'di tempo e non sono sicuro che sia stato disponibile al momento dell'OP ma ora c'è un Qpagerequest Object introdotto che consente di ordinare tramite queryddl da aggiungere a DSL DSL di DSL ... .

Ecco un modo molto più semplice per costruire un oggetto Sort usando querydsl:

new QSort(user.manager.firstname.asc())
.

Quindi puoi usarlo in un PageRequest come così:

new PageRequest(0, 10, new QSort(user.manager.firstname.asc()))
.

Il metodo getExpression() è stato rimosso, e ho avuto espressioni simili a QPost.post.period.periCode che avevano bisogno una traversata, e senza il nome completo di espressione non potevo fare nulla a riguardo, quindi ora ho fatto unMetodo che raccoglie period.periCode e funziona perfettamente su QPost.post.

private String resolveOrderPath(Path<?> path) {
    StringBuilder stringBuffer = new StringBuilder(path.getMetadata().getName());
    path = path.getMetadata().getParent();
    while(!path.getMetadata().isRoot()) {
        stringBuffer.insert(0, path.getMetadata().getName() + ".");
        path = path.getMetadata().getParent();
    }
    return stringBuffer.toString();
}

Path<?> path = QPost.post.period.periCode;
String propertyPath = resolveOrderPath(path);
Sort sort = new Sort("asc".equals(sSortDir0) ? Sort.Direction.ASC : Sort.Direction.DESC, propertyPath);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top