Как указать многоколоночный OrderSpecifier для использования в SpringData и QueryDsl? Это возможно

поэтому у меня есть следующий запрос ниже:

public Iterable<Dealer> findAll(Dealer dealer) {
    QDealer qdealer = QDealer.dealer;

    BooleanExpression where = null;
    if(dealer.getId() != null && dealer.getId() != 0) {
        buildPredicate(qdealer.id.goe(dealer.getId()));
    }

    OrderSpecifier<String> sortOrder = QDealer.dealer.dealerCode.desc();
    Iterable<Dealer> results = dlrRpstry.findAll(where, sortOrder); 
    return results;
}

запрос выше работает нормально. Однако я хотел бы сначала отсортировать результаты по dealerType, а затем по dealerCode, как "order by dealerType asc, dealerCode desc". Как создать экземпляр OrderSpecifier, чтобы результаты были отсортированы по типу dealerType, а затем по коду дилера.

DealerRepository dlrRpstry расширяет JpaRepository, QueryDslPredicateExecutor

Я использую spring-data-jpa-1.1.0, spring-data-commons-dist-1.3.2 и querydsl-jpa-2.9.0.

Если OrderSpecifier не может быть настроен на порядок сортировки нескольких столбцов, каким будет альтернативное решение, которое удовлетворит моему требованию сортировки результатов "по dealerType asc, dealerCode desc".

любая помощь была бы весьма признательна. Спасибо заранее.

Ник

1 ответов


У меня нет установки установки JPA, но я считаю, что, читая документацию QueryDslJpaRepository, вы можете просто сделать это:

OrderSpecifier<String> sortOrder1 = QDealer.dealer.dealerType.asc();
OrderSpecifier<String> sortOrder2 = QDealer.dealer.dealerCode.desc();
Iterable<Dealer> results = dlrRpstry.findAll(where, sortOrder1, sortOrder2); 

дайте нам знать, если это работает. Вот ссылка на вопрос/ответ stackoverflow, который объясняет ... синтаксис параметров метода findAll ():

https://stackoverflow.com/a/12994104/2879838

Это означает, что вы можете иметь столько OrderSpecifiers, как вы хотите как необязательные параметры функция.