获取有关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循环保存数据,为啥只保存了最后一条数据
使用 Spring Data JPA 获取两个日期之间的记录