【问题标题】:How to sort by a composed field with CrudRepository?如何使用 CrudRepository 按组合字段排序?
【发布时间】:2019-09-02 15:38:52
【问题描述】:

我有一个简单的CrudRepository 接受可排序的:

class PersonReposiroty extends CrudRepository<Person, Long> {
  findAll(Pageable page);
}

我想通过两个字段的sum对其进行排序:

dao.findAll(PageRequest.of(page, size, Sort.by("price1, price2"));

问题:首先按price1 排序,然后按price2。以前怎么求和?

【问题讨论】:

  • 我认为到那时你必须写一个明确的查询。
  • 由于这只支持按映射的数据库列排序,因此您需要使用计算值创建一个视图,然后使用 @SecondaryTable 将其映射为实体中的字段以从中提取值视图。
  • 我必须将视图创建为模型 bean 还是数据库表?我更喜欢编程解决方案,而不必接触数据库...
  • 没有模型 bean。使用@SecondaryTable 将数据库视图列映射到退出实体。强大的选项,您可以在数据库中对任何其他持久属性进行排序、过滤等。否则,您需要实现自己的查询逻辑。例如stackoverflow.com/questions/53176186/…

标签: java spring jpa spring-data-jpa spring-data


【解决方案1】:

我发现实际上可以按总和排序,如下querydsl

private PageRequest pricePageSort() {
    OrderSpecifier<BigDecimal> sort = QPerson.person.price1.add(QPerson.person.price2).asc(); //or .desc()
    return new QPageRequest(pageNumber, pageSize, sort);
}

然后使用它:

dao.findAll(predicate, pricePageSort());

因此,CrudRepository 可能必须 extends QuerydslPredicateExecutor&lt;Person&gt;,但我还是在使用它。

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2021-01-30
    • 2017-01-26
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多