如何使用标准和分页

大家好,我正在尝试将标准与分页一起使用,但我的代码不起作用,这里是:


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 中指定的结果


我究竟做错了什么 ?


森林海
浏览 168回答 2
2回答

波斯汪

您没有使用分页请求:列表列表 = query.getResultList();此查询将始终查询所有结果,这是非常低效的。相反,您应该以Spring 方式执行此操作,即您应该使用扩展 a 的存储库接口PagingAndSortingRepository(例如 JpaRepository 接口)。然后只需使用一种方法对结果进行分页,例如文档中所述的 findAll&nbsp;:PagingAndSortingRepository<User,&nbsp;Long>&nbsp;repository&nbsp;=&nbsp;//&nbsp;…&nbsp;get&nbsp;access&nbsp;to&nbsp;a&nbsp;bean Page<User>&nbsp;users&nbsp;=&nbsp;repository.findAll(new&nbsp;PageRequest(1,&nbsp;20));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java