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

时间:2014-12-19 13:42:28

标签: java spring spring-mvc 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的property desc!遍历路径:News.publicationDate。

如果我删除了描述,我会得到这个:

  

引起:java.util.NoSuchElementException

我做错了什么?

2 个答案:

答案 0 :(得分:48)

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

findFirst5ByOrderByPublicationDateDesc()

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

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

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

答案 1 :(得分:10)

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

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

创建自定义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();

这将返回最高记录。

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

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