Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 boot 使用Pageable查询后的JPA排序查询结果_Spring Boot_Jpa - Fatal编程技术网

Spring boot 使用Pageable查询后的JPA排序查询结果

Spring boot 使用Pageable查询后的JPA排序查询结果,spring-boot,jpa,Spring Boot,Jpa,我有一个像这样的@实体: import java.time.LocalDateTime; import javax.persistence.Entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.jpa.domain.AbstractPersistable; @Entity @Data@NoArgs

我有一个像这样的@实体:

import java.time.LocalDateTime;
import javax.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.jpa.domain.AbstractPersistable;

@Entity
@Data@NoArgsConstructor@AllArgsConstructor
public class Message extends AbstractPersistable<Long> {

    private LocalDateTime messageDate = LocalDateTime.now();
    private String message;

}
import java.util.List;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MessageRepository extends JpaRepository<Message, Long> {
    //List<Message> findAllByOrderByMessageDateAsc(Pageable pageable);
    // With this I am trying to re-sort what I get

}

我收到五条最新消息,按降序排列。但是,我如何按升序获取它们呢?

您需要的是按按摩日期升序的最后5条消息。 有两种解决方法

使用可分页的
的自定义实现

无法为
PageRequest
正确使用偏移量。所以 对于偏移量,需要使用
Pageable
的自定义实现。 您可以使用自定义实现。那就这样用吧

int totalCount = (int)serviceRepository.count();
Pageable pageable = new OffsetBasedPageRequest(totalCount - limit, limit, Sort.by("messageDate"));
messageRepository.findAll(pageable);
获取排序页面数据后

您可以使用
Page.getContent()
Page
获取列表,然后手动对列表进行排序

Pageable pageable = PageRequest.of(0, limit, Sort.by("messageDate").descending());
List<Message> list = messageRepository.findAll(pageable ).getContent();
List<Message> sorted =list.stream().sorted(Comparator.comparing(r -> r.getMessageDate())).collect(Collectors.toList());
Pageable Pageable=PageRequest.of(0,limit,Sort.by(“messageDate”).descending());
List=messageRepository.findAll(可分页).getContent();
List sorted=List.stream().sorted(Comparator.comparing(r->r.getMessageDate()).collect(Collectors.toList());

如果需要,您还必须创建
页面。

您需要的是按按摩日期升序排列的最后5条消息。 有两种解决方法

使用可分页的
的自定义实现

无法为
PageRequest
正确使用偏移量。所以 对于偏移量,需要使用
Pageable
的自定义实现。 您可以使用自定义实现。那就这样用吧

int totalCount = (int)serviceRepository.count();
Pageable pageable = new OffsetBasedPageRequest(totalCount - limit, limit, Sort.by("messageDate"));
messageRepository.findAll(pageable);
获取排序页面数据后

您可以使用
Page.getContent()
Page
获取列表,然后手动对列表进行排序

Pageable pageable = PageRequest.of(0, limit, Sort.by("messageDate").descending());
List<Message> list = messageRepository.findAll(pageable ).getContent();
List<Message> sorted =list.stream().sorted(Comparator.comparing(r -> r.getMessageDate())).collect(Collectors.toList());
Pageable Pageable=PageRequest.of(0,limit,Sort.by(“messageDate”).descending());
List=messageRepository.findAll(可分页).getContent();
List sorted=List.stream().sorted(Comparator.comparing(r->r.getMessageDate()).collect(Collectors.toList());

然后,如果需要,您必须再次创建
Page

使用Sort.by(“messageDate”)。如果我不使用PageRequest,则使用升序()。of(0,5,Sort.by(“messageDate”)。downsing()使用PageRequest。of(0,5,Sort.by(“messageDate”)。升序()我得到最早的五条消息。我要按升序排列最晚5条。你需要的是按摩日期前最后5条信息。最简单的方法是执行计数查询,然后再次请求,或者在获取后必须手动排序。我尝试了long count=messageRepository.count();Pageable limit=PageRequest.of((int)count/5,5,Sort.by(“messageDate”).ascending();它并不总是给出五条记录。获取后如何排序?我添加了一个答案,希望对您有所帮助。如果我不使用PageRequest,请使用sort.by(“messageDate”).ascending()。of(0,5,sort.by(“messageDate”).descending())使用PageRequest。of(0,5,sort.by(“messageDate”).ascending())我获取最早的五条消息。我要按升序排列最晚5条。你需要的是按摩日期前最后5条信息。最简单的方法是执行计数查询,然后再次请求,或者在获取后必须手动排序。我尝试了long count=messageRepository.count();Pageable limit=PageRequest.of((int)count/5,5,Sort.by(“messageDate”).ascending();它并不总是给出五条记录。获取后如何排序?我添加了一个答案,希望对您有所帮助。谢谢。那不太管用。此列表上出现错误。排序(Comparator.comparing(a->a.getMessageDate());但是这个工作列表content=messageRepository.findAll(limit).getContent().stream().sorted(Comparator.comparing(r->r.getMessageDate()).collect(Collectors.toList());根据需要进行更新可能是因为list是不可变的list.sort(Comparator.comparing(a->a.getMessageDate());应该谢谢你。那不太管用。此列表上出现错误。排序(Comparator.comparing(a->a.getMessageDate());但是这个工作列表content=messageRepository.findAll(limit).getContent().stream().sorted(Comparator.comparing(r->r.getMessageDate()).collect(Collectors.toList());根据需要进行更新可能是因为list是不可变的list.sort(Comparator.comparing(a->a.getMessageDate());应该有用