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

vir*_*sha 10 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);
Run Code Online (Sandbox Code Playgroud)

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

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

Ori*_*Dar 5

从参考文档:

要了解您完全为查询获得了多少页,您必须触发额外的计数查询。默认情况下,此查询将从您实际触发的查询派生。

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

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


vir*_*sha 4

我期望的输出是最后 n 条记录。

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

int n = 10;

Pageable pageCount = new PageRequest(0, n);

List<TxnEntity> txnEntities = txnDAO
        .findByAccountEntityOrderByIdDesc(accountEntity,pageCount);
Run Code Online (Sandbox Code Playgroud)

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

DAO 将按降序返回所有记录,通过使用 Pageable,我们可以从底部知道我们需要多少条记录。

很简单。

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