为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用标准和分页

如何使用标准和分页

森林海 2021-09-12 16:11:07
大家好,我正在尝试将标准与分页一起使用,但我的代码不起作用,这里是:public Page<Person> getAuthorizationsTest() {    PageRequest pageRequest = new PageRequest(1, 5);    CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();    CriteriaQuery<Person> queryBase = criteriaBuilder.createQuery(Person.class);    Root<Person> root = queryBase.from(Person.class);    List<Predicate> queryConditions = new ArrayList<>();    Predicate predicate = criteriaBuilder.like(root.get("name"), "%[myValue]%");    queryConditions.add(predicate);    queryBase.where(queryConditions.toArray(new Predicate[]{}));    TypedQuery<Person> query = em.createQuery(queryBase);    List<Person> list = query.getResultList();    Page<Person> authorizations = new PageImpl<Person>(list, pageRequest, list.size());    return authorizations;}一切看起来都很好,但是当我执行它时,我会收到一个包含所有结果的列表页面,而不仅仅是我的 pageRequest 中指定的结果我究竟做错了什么 ?
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

您没有使用分页请求:

列表列表 = query.getResultList();

此查询将始终查询所有结果,这是非常低效的。

相反,您应该以Spring 方式执行此操作,即您应该使用扩展 a 的存储库接口PagingAndSortingRepository(例如 JpaRepository 接口)。

然后只需使用一种方法对结果进行分页,例如文档中所述的 findAll :

PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(new PageRequest(1, 20));


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信