对于所有 JPA 查询对象(本机 SQL 查询除外),可以通过 setMaxResults(int) 和 setFirstResult(int) 方法使用分页。例如:
return em.createNamedQuery("yourqueryname", YourEntity.class)
.setMaxResults(noOfRecords)
.setFirstResult(pageIndex * noOfRecords)
.getResultList();
JPA 将为您执行分页。
命名查询只是预定义的,可以缓存,而其他类型是动态创建的。
因此,选择使用JPQL,如下所示:
Query query = em.createQuery("SELECT s FROM Submission s WHERE s.code = :code or s.id = :id ORDER BY s.id", Submission.class);
或者 CriteriaBuilder api 来形成类似的查询:
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Submission> cq = qb.createQuery(Submission.class);
Root<Submission> 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);
例如,不要忘记使用query.setParameter(“id”,sf.id)设置参数值。