我想获取实体的最后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
接口获取它呢?
答案 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%的情况下起作用,但你应该谨慎。
这是你想要做的吗?