获取春季数据上按日期排序的最后记录要返回前 10 条记录,您可以使用:要返回最近 10 条记录,您可以使用:

2022-09-01 02:22:48

我正在尝试在Spring Data存储库中定义一个方法来获取按日期排序的表上的最后记录。这是我的实体:

@Entity
public class News {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String text;

    private Date publicationDate;

    /* Getters and Setters */
}

这是我的存储库:

public interface NewsRepository extends JpaRepository<News, Long> {
    List<News> findFirst5OrderByPublicationDateDesc();
}

如果我尝试使用启动项目,我会得到下一个错误:

原因:org.springframework.data.mapping.PropertyReferenceException:找不到 Date 类型的属性 desc!遍历路径:News.publicationDate。

如果我删除Desc,我得到这个:

Caused: java.util.NoSuchElementException

我做错了什么?


答案 1

事实证明,该方法的签名不正确。正确的是:

findFirst5ByOrderByPublicationDateDesc()

有点令人困惑,因为在官方样本中,他们有这个:

List<User> findTop10ByLastname(String lastname, Pageable pageable);

如您所见,那里只有一个,通常的那个。


答案 2

Spring JPaRepository有分页,可以有很大的帮助。这也将完美地工作

要返回前 10 条记录,您可以使用:

创建自定义可分页对象

Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "id");

Page<News> topPage = newsRepository.findByPublicationDate(id, pageable);
List<News> topUsersList = topPage.getContent();

在新闻存储库界面中,确保创建一个方法

 Page<News> findByPublicationDate(Date date, Pageable pageable);

这将返回排名靠前的记录。

要返回最近 10 条记录,您可以使用:

Pageable pageable = new PageRequest(0, 10, Sort.Direction.DESC, "id");

Page<News> bottomPage = newsRepository.findByPublicationDate(id, pageable);
// this is a list of the last 10 records, you can choose to invert it by using
List<News> bottomUsersList = bottomPage.getContent();

Collections.inverse(bottomUsersList);

这将重用相同的NewsRespoitory,因此无需在那里创建另一种方法。

使用页面的优点是可以灵活地按另一列进行排序。(ASC 或 DESC)

// To get top by text
Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "text");
// Top by title
Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "title");
// Top by publicationDate
Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "publicationDate");

10 可以替换为您需要返回的任何数量的记录


推荐