首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring数据JPA Java -从查询中获取最后10条记录

Spring数据JPA Java -从查询中获取最后10条记录
EN

Stack Overflow用户
提问于 2014-06-05 19:41:55
回答 5查看 52.6K关注 0票数 7

是否有方法从查询中检索最后X个结果?

例如-如果想要前十个结果,我看到这里的示例有效:setMaxResults for Spring JPA注释?

代码语言:javascript
复制
 public interface UserRepository extends Repository<User, Long> {

       List<User> findByUsername(String username, Pageable pageable);
 }
 //and then I could call it like this
 Pageable topTen = new PageRequest(0, 10);
 List<User> result = repository.findByUsername("Matthews", topTen);

但我怎么才能拿到最后十张唱片?

我能想到的唯一方法是翻转查询中的顺序(假设原始结果是升序的),然后向后遍历列表,这样我就可以按照我想要的顺序(升序)处理它。

这似乎是一种丑陋的做法。有没有办法让查询按我想要的顺序给出最后的X结果?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-05 20:16:29

问题是,这种选择的效率有多高,特别是针对大型数据集。

我将使用降序索引,可以使用maxResult支持进行查询,因为您已经知道了这一点。

这不可能是黑客。如果你要匹配100米的结果,只得到最后的X个结果,这个方法会得到最好的结果。

票数 4
EN

Stack Overflow用户

发布于 2014-10-24 17:15:54

Spring Data JPA 1.7在派生查询中引入了'top‘和'first’作为关键字,因此现在我们可以这样做:

代码语言:javascript
复制
public interface UserRepository extends Repository<User, Long> {

   List<User> findFirst10ByUsername(String username);
}

看看- 春季数据发布列车埃文斯去GA

票数 18
EN

Stack Overflow用户

发布于 2015-02-15 00:23:03

PageRequest可能对它非常有用。构建PageRequest有许多选项。

因此,一个可能的选择是:

代码语言:javascript
复制
Pageable topTen = new PageRequest(0, 10, Direction.ASC, "username"); 
List<User> result = repository.findByUsername("Matthews", topTen);

我也使用没有参数(关于对象的条件)。

代码语言:javascript
复制
@Query(value="select p from Person p")
public List<Person> findWithPageable(Pageable pageable);

然后打电话:

代码语言:javascript
复制
repository.findWithPageable(new PageRequest(0, 10, Direction.DESC, "id"));
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24068884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档