获取有关Spring Data数据的最后记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取有关Spring Data数据的最后记录相关的知识,希望对你有一定的参考价值。

我正在尝试在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,我会得到这个:

引起:java.util.NoSuchElementException

我做错了什么?

答案

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

findFirst5ByOrderByPublicationDateDesc()

有点混乱,因为在官方样本中他们有这个:

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

正如你所看到的,那里只有一个,通常的那个。

另一答案

Spring JPaRepository具有分页功能,可以提供很大的帮助。这也将完美地运作

To return the top 10 records, you can use:

创建自定义Pageable对象

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

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

在NewsRepository接口中,请务必创建一个方法

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

这将返回最高记录。

To return the last 10 records, you can use:

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可以替换为您需要返回的任何数量的记录

以上是关于获取有关Spring Data数据的最后记录的主要内容,如果未能解决你的问题,请参考以下文章

spring-data-jpa循环保存数据,为啥只保存了最后一条数据

如何获取 Core Data 数据库的最后一条记录?

使用 Spring Data JPA 获取两个日期之间的记录

使用 Spring Data JPA 和 @Query 注释仅获取第一个/最后一个元素

Spring Data (数据)MongoDB

Spring Data MongoRepository 获取最新一条记录