如何检索有限的相关实体集合?

时间:2011-04-20 14:27:40

标签: java jpa-2.0

假设我们有一个实体用户,它有很多评论。 可以这样做:

List<Comment> = user.getComments();

但这会加载所有用户的评论。 例如,我们应该如何检索前10个? 是否类似于:

List<Comment> = user.getComments().setOffset(0).stLimit(10).getResultList();

2 个答案:

答案 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();