Hibernate pagination mechanism

后端 未结 3 1601
礼貌的吻别
礼貌的吻别 2020-12-14 11:26

I am trying to use Hibernate pagination for my query (PostgreSQL )

I set setFirstResult(0), setMaxResults(20) for my SQL query. My code is

3条回答
  •  我在风中等你
    2020-12-14 12:25

    There are quite a few ways to paginate.

    HQL and setFirstResult, setMaxResults API

    Session session = sessionFactory.openSession();
    Query query = session.createQuery("From Foo");
    query.setFirstResult(0);
    query.setMaxResults(10);
    List fooList = query.list();
    //Total count
    String countQ = "Select count (f.id) from Foo f";
    Query countQuery = session.createQuery(countQ);
    Long countResults = (Long) countQuery.uniqueResult();
    //Last Page
    int pageSize = 10;
    int lastPageNumber = (int) ((countResult / pageSize) + 1);
    

    HQL and the ScrollableResults API

    String hql = "FROM Foo f order by f.name";
    Query query = session.createQuery(hql);
    int pageSize = 10;
    
    ScrollableResults resultScroll = query.scroll(ScrollMode.FORWARD_ONLY);
    resultScroll.first();
    resultScroll.scroll(0);
    List fooPage = Lists.newArrayList();
    int i = 0;
    while (pageSize > i++) {
        fooPage.add((Foo) resultScroll.get(0));
        if (!resultScroll.next())
            break;
    }
    //Total count
    resultScroll.last();
    int totalResults = resultScroll.getRowNumber() + 1;
    

    Simply the Criteria API

    Criteria criteria = session.createCriteria(Foo.class);
    criteria.setFirstResult(0);
    criteria.setMaxResults(pageSize);
    List firstPage = criteria.list();
    //Total count
    Criteria criteriaCount = session.createCriteria(Foo.class);
    criteriaCount.setProjection(Projections.rowCount());
    Long count = (Long) criteriaCount.uniqueResult();
    

    baeldung lists them all with examples.

提交回复
热议问题