如何在SpringData和QueryDsl中指定多列OrderSpecifier?这可能吗

时间:2013-11-20 07:42:07

标签: spring-data-jpa 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对结果进行排序,有点像“由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配置为多列排序顺序,那么将满足我的排序结果的替代解决方案“by dealerType asc,dealerCode desc”。

非常感谢任何帮助。提前谢谢。

尼克

1 个答案:

答案 0 :(得分:14)

我没有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作为函数的可选参数。