Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring分页与案例排序_Spring_Spring Boot_Spring Data Jpa_Spring Data - Fatal编程技术网

Spring分页与案例排序

Spring分页与案例排序,spring,spring-boot,spring-data-jpa,spring-data,Spring,Spring Boot,Spring Data Jpa,Spring Data,我对春天的分类有问题。我有一个枚举类 public enum Category { A, B, C, D, E, F; private static final List<Category> THRILLER; static { THRILLER = Arrays.asList(A, F, D); } private static final List<Category> DRA

我对春天的分类有问题。我有一个枚举类

public enum Category {
    A,
    B,
    C,
    D,
    E,
    F;


   private static final List<Category> THRILLER;
   static {
       THRILLER = Arrays.asList(A, F, D);
    }

   private static final List<Category> DRAMA;
   static {
      DRAMA = Arrays.asList(C, E, B);
    }
}
现在我有了一个返回电影列表的rest端点。我想按照以下顺序对这个列表进行排序:它们属于THRILLER的电影应该首先显示。如果两部电影属于同一类别,则应按实现日期进行排序

@GetMapping(value = "/movies")
public ResponseEntity<PagedResources<Movie>> list(@PageableDefault() Pageable pageable) {
  .......
}
但这种排序只能按字母顺序排列枚举


我需要一种可能性来执行类似的操作:
Sort.by(Category.THRILLER.contains(movie.getCategory())
。我有可能通过Pageable实现这一点,或者我应该用另一种方式实现这一点

AFAIK
Sort
在spring中,分页仅在中对字段进行排序(与SQL中相同,除非您使用某些SQL过程版本,如PSQL),因此无法引入一些自定义排序逻辑

您有两个选择:

  • 在数据库中引入自定义过程/函数,并从代码中调用它(丑陋和糟糕的方法)
  • 从DB获取电影列表后,通过播放lambdas和自定义比较器对电影列表进行排序(干净且更简单的方法)

Spring数据直接支持按简单属性排序。 因此,为了使其工作,您需要提供一个
isThriller
属性

可以使用以下方法对现有对象结构执行此操作:

a) 用于填充数据库中列的触发器

b) 使用视图计算所需的值

c) 如果使用Hibernate,可以使用
@Formula
注释来指示它计算值

在这两种情况下,您都是在字符串或数据库中硬编码构成惊悚片的类别


如果您不想让
Category
成为一个具有
isThriller
属性的实体,然后您可以按照通常的方式进行查询和排序。

对我来说,您的代码毫无意义,您有表示类别类型的enum,以及作为类别名称的字段名,这是列表和聚合其他类别?重点在哪里?我有一个包含字段类别的电影实体。如前所述,当类别相同时,我想按类别和实现日期对电影进行排序。我认为第二个建议不起作用,因为我正在使用分页。是的,但你们有自己的端点,在那个里你们可以引入自定义的排序逻辑。然后我必须得到所有的电影,然后排序,然后创建页面,这将是如此沉重,因为我们有很多电影。排序必须在数据库层中进行。我通过使用添加了isThriller属性的数据库视图解决了这个问题。非常感谢。
@GetMapping(value = "/movies")
public ResponseEntity<PagedResources<Movie>> list(@PageableDefault() Pageable pageable) {
  .......
}
@SortDefault.SortDefaults({SortDefault(sort="category", direction=Sort.Direction.ASC), SortDefault(sort="realizationDate", direction=Sort.Direction.ASC)})