spring-data - QuerydslJpaPredicateExecutor 按子类中的字段排序

标签 spring-data querydsl

1) 示例中使用的模型

@Getter
@Setter
@Entity
@Table(name = "car")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Car {
    
    private String color;
}


@Entity
@Getter
@Setter
public class Truck extends Car { 
    
    private Clutch clutch;
}

@Entity
@Getter
@Setter
public class Clutch { 

    private String manufacturerCode;
}

和存储库类:

public interface CarRepository extends JpaRepository<Car, Integer>,
        QuerydslPredicateExecutor<Car> {}
        
public interface TruckRepository extends JpaRepository<Truck, Integer>,
        QuerydslPredicateExecutor<Truck> {}
        
public interface PassengerCarRepository extends JpaRepository<PassengerCar, Integer>,
        QuerydslPredicateExecutor<PassengerCar> {}
    

2。问题

在 GUI 中有对所有“汽车”的调用,因此调用来自“CarRepository”:

carRepository.findAll(predicate, pageable)

我可以创建自己的“可分页”实现,并像这样在其中放置“排序”:

@Getter
public class OwnPageable extends AbstractPageRequest {
    private final Sort sort;

    public CustomPageRequest(final int page, final Sort sort) {
        super(page, size);
        this.sort = sort;
    }

所以在这个调用中:carRepository.findAll(predicate, pageable) 我把“OwnPageable”和“sort”字段放在一起。它工作得很好。但只有当我从 Car 中指定字段时,而不是从任何具体实现中指定字段时。如果我将: org.springframework.data.domain.Sort 和属性 clutch.manufacturerCode 放入 ownPageable 它将不起作用,因为 clutch 不是 car 实体的一部分。这很清楚。

3。问题

在我的示例中如何按 clutch.manufacturerCode 排序?

最佳答案

你正在尝试的是不可能的。您想要对所有 Car 进行排序,它们可以是任意数量的子类型,例如 SuvSport 等,这些子类型可能有也可能没有嵌套属性 clutch.manufacturerCode

由于您将子类型的属性指定为排序顺序,它不会出现在所有汽车中,在您的情况下,它只能对 Car 进行排序,它们是 truck带有 clutch 的。如果允许,休眠在检索其他类型的 Car 时会遇到麻烦,但没有此属性。

关于spring-data - QuerydslJpaPredicateExecutor 按子类中的字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62719731/

相关文章:

Spring Data Rest - 如何在 @RepositoryEventHandler 中接收 header

spring - Spring Data Mongodb Reactive 存储库中 findAll 方法的分页

querydsl 3.3.0 - 在带有 N 个 bool 参数的查询中使用 collection.any() 和 elementcollections 生成 N 个 "exists"子查询

sql - 带SUM的GROUP BY,不会删除空(空)值

java - Querydsl:如何编写 "complex"查询

elasticsearch - hive 的不重复计数与 Elasticsearch 的基数不匹配

java - Spring Data Elasticsearch 何时支持服务器版本 7.1?

java - Spring Data Jpa 选择新问题

java - 单个存储库中的自定义方法返回 null

java - QueryDSL JPA 和 PostgreSQL 的集合查询问题