您可以使用JPA Criteria
API来完成此任务。假设TypedQuery,您将使用
setFirstResult和
setLastResult限制从数据库返回的记录。当然,这些方法的值将取决于请求的页面以及每页显示多少记录。
first = (page - 1) * page size;last = (page * size) - 1;
注意: 这假设第一页为1(而不是零)。
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();final CriteriaQuery<Long> countQuery = builder.createQuery(Long.class);countQuery.select(builder.count(countQuery.from(MyEntity.class)));final Long count = entityManager.createQuery(countQuery) .getSingleResult();
您可以自定义上面的代码来执行相对于另一个查询的计数。最后,您需要某种方式将总数传递回客户端。一种方法是将查询的结果集包装在另一个包含计数属性的对象中,或者将其作为DAO调用的结果返回。或者,您可以将count属性存储在请求范围内的对象中。
public class ResultListWrapper<T> { private Long count; private Collection<T> results; // constructor, getters, setters}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)