hea*_*ock 6 sql spring hibernate jpa spring-data-jpa
有没有办法从查询中检索最后X个结果?
例如 - 如果想要前十个结果,我看到这里的例子有效:Spring-Data-JPA注释的setMaxResults?
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);
Run Code Online (Sandbox Code Playgroud)
但是如何获得最后十条记录呢?
我能想到的唯一方法就是翻转查询中的顺序(findByUsernameDesc,假设原始结果是升序的),然后向后遍历列表,这样我就可以按照我想要的顺序(升序)处理它.
这似乎是一种丑陋的方式.有没有办法让查询按我想要的顺序给我最后的X结果?
Raf*_*cha 14
Spring Data JPA 1.7在派生查询中引入了"top"和"first"作为关键字,所以现在我们可以这样做:
public interface UserRepository extends Repository<User, Long> {
List<User> findFirst10ByUsername(String username);
}
Run Code Online (Sandbox Code Playgroud)
检查出来 - Spring Data Release Train Evans Goes GA
小智 7
PageRequest对它非常有用.构建PageRequest有很多选项.
所以,可能的选择是:
Pageable topTen = new PageRequest(0, 10, Direction.ASC, "username");
List<User> result = repository.findByUsername("Matthews", topTen);
Run Code Online (Sandbox Code Playgroud)
我也使用没有参数(关于对象的条件).
@Query(value="select p from Person p")
public List<Person> findWithPageable(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
并致电:
repository.findWithPageable(new PageRequest(0, 10, Direction.DESC, "id"));
Run Code Online (Sandbox Code Playgroud)
问题是这种选择的效率如何,尤其是针对大型数据集。
我会选择降序索引,我可以使用 maxResult 支持进行查询,正如您已经弄清楚的那样。
这绝不是黑客行为。如果您要匹配 100M 个结果,仅获取最后 X 个结果,则此方法将产生最佳结果。
| 归档时间: |
|
| 查看次数: |
31725 次 |
| 最近记录: |