我正在尝试在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的property desc!遍历路径:News.publicationDate。
如果我删除了描述,我会得到这个:
引起:java.util.NoSuchElementException
我做错了什么?
答案 0 :(得分:48)
事实证明该方法的签名不正确。正确的是:
findFirst5ByOrderByPublicationDateDesc()
有点令人困惑,因为在官方样本中他们有这个:
List<User> findTop10ByLastname(String lastname, Pageable pageable);
正如你所看到的,那里只有一个,通常的那个。
答案 1 :(得分:10)
Spring JPaRepository有分页,可以提供很大的帮助。这也将完美地运作
创建自定义Pageable对象
tail -f
在NewsRepository界面中,请务必创建方法
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);
这将重复使用相同的NewsRespoitory,因此无需在那里创建另一个方法。
使用页面的优点是可以灵活地按另一列进行排序。 (ASC或DESC)
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);
10可以替换为您需要返回的任何数量的记录