How to paginate a JPA Query

前端 未结 3 608
心在旅途
心在旅途 2021-01-30 11:52

I have a submission table with columns like ID, Name, Code among other properties. My requirement is to search for records based on the me

3条回答
  •  一向
    一向 (楼主)
    2021-01-30 12:20

    For all JPA query objects (except for native SQL queries), you would use pagination through the setMaxResults(int) and setFirstResult(int) methods. For instance:

      return em.createNamedQuery("yourqueryname", YourEntity.class)
          .setMaxResults(noOfRecords)
          .setFirstResult(pageIndex * noOfRecords)
          .getResultList();
    

    JPA will perform the pagination for you.

    Named queries are just predefined and can be cached, while other types are dynamically created.
    So the choice is to use JPQL like:

    Query query = em.createQuery("SELECT s FROM Submission s WHERE s.code = :code or s.id = :id ORDER BY s.id", Submission.class);
    

    Or CriteriaBuilder api to form a similar query:

        CriteriaBuilder qb = em.getCriteriaBuilder();
        CriteriaQuery cq = qb.createQuery(Submission.class);
    
        Root root = cq.from(Submission.class);
        cq.where( qb.or( 
            qb.equal(root.get("code"), qb.parameter(String.class, "code")),
            qb.equal(root.get("id"), qb.parameter(Integer.class, "id"))
        ));
        Query query = em.createQuery(cq);
    

    Don't forget to set the parameter values using query.setParameter("id", sf.id) for example.

提交回复
热议问题