Spring Data JPA,如何通过Pageable获取最后一页

时间:2015-05-19 12:59:49

标签: java spring hibernate jpa

我想获取实体的最后5条记录。但无法通过Spring Data JPA获取它。

最初我试图通过LIMIT查询获取数据,但JPA不支持LIMIT。

后来我尝试使用Pageable界面。

Pageable pageCount = new PageRequest(0, 10, Direction.ASC,"id");
List<TxnEntity> txnEntities = txnDAO
            .findByAccountEntity(accountEntity,pageCount);

这给了我第一页10个对象。

但我的要求是获得最后10或5个对象。那么如何通过Spring框架中的Pageable接口获取它呢?

4 个答案:

答案 0 :(得分:4)

参考文献:

  
    

要查找完全为查询获取的页数,您必须触发其他计数查询。默认情况下,此查询将从您实际触发的查询中派生。

  

您可以通过提前发出计数查询来确定页数:

Long count = txnDAO.countByAccountEntity(accountEntity);
Pageable pageCount = new PageRequest((int)count/10, 10, Direction.ASC,"id");

答案 1 :(得分:4)

我期待的输出是最后n个记录。

所以我使用了Spring Data JPA 1.7内置查询

int n = 10;

Pageable pageCount = new PageRequest(0, n);

List<TxnEntity> txnEntities = txnDAO
        .findByAccountEntityOrderByIdDesc(accountEntity,pageCount);

现在这将返回最后n条记录。

DAO将按降序返回所有记录,通过使用Pageable,我们可以从底部获得多少记录。

很简单。

有关更多JPA查询内置查询:http://docs.spring.io/spring-data/jpa/docs/current/reference/html/

答案 2 :(得分:0)

您可以撤消排序,然后获得前5个。

答案 3 :(得分:0)

仅供参考:

根据http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.limit-query-result

您还可以在存储库中创建方法findTop5ByAccountEntityOrderByIdDesc(accountEntity)。我更喜欢使用附加计数查询的解决方案。

如果需要,您还可以添加Pageable参数,但它没有多大意义。

但是,有几个潜在的问题:id不是找到&#34; last&#34;条目。它总是会给你相同的结果,但是根据生成策略以及id如何被缓存,不能保证,最后一次保存&#34;实体具有最高ID。这可能在90%的情况下起作用,但你应该谨慎。

这是你想要做的吗?