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

2024-01-30

所以我有以下查询:

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 DealType 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”进行排序的要求。

任何帮助将不胜感激。提前致谢。

Nick


我没有 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 https://stackoverflow.com/a/12994104/2879838

这意味着您可以将任意数量的 OrderSpecifier 作为函数的可选参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指定在 SpringData 和 QueryDsl 中使用的多列 OrderSpecifier?这可能吗 的相关文章

随机推荐