假设我们有一个实体用户,它有很多评论。 可以这样做:
List<Comment> = user.getComments();
但这会加载所有用户的评论。 例如,我们应该如何检索前10个? 是否类似于:
List<Comment> = user.getComments().setOffset(0).stLimit(10).getResultList();
答案 0 :(得分:2)
您应该使用LIMIT
在查询中限制此项,而不是在代码中。
例如:
SELECT comment.id, comment.name FROM comment WHERE comment.name =:username
ORDER BY comment.id DESC LIMIT 10;
或者您可以使用jpa:here
中的setMaxResults
方法
例如:
Query query=em.createQuery("SELECT st FROM Student st WHERE st.sroll > ?param");
query.setParameter(param, 100);
query.setMaxResults(3);
List stuList=query.getResultList();
答案 1 :(得分:1)
标准的Java方法(并且我很确定JPA提供程序具有支持它的功能)是:
List<Comment> = user.getComments().subList(0,10);
<强>参考强>
或者您可以使用极其详细的JPA 2 CriteriaQuery
API:
CriteriaQuery<Comment> cQuery =
entityManager.getCriteriaBuilder()
.createQuery(Comment.class);
cQuery.select(cQuery.from(Customer.class)
.get(Customer_.comments));
List<Comment> comments =
entityManager.createQuery(cQuery)
.setFirstResult(0)
.setMaxResults(0)
.getResultList();