Going back to your JPQL example, doesn't this work:

    SELECT p, SIZE(p.comments) as c
    FROM Post p
    ORDER BY c DESC


On Wed, Jan 8, 2014 at 4:27 PM, wlad <vvo...@yahoo.com> wrote:

> I am having problem with building a query with JPA Criteria API.
>
> Entities and significant properties:
>
>     @Entity
>     public class Post {
>         @Id int id;
>         @OneToMany (mappedBy = "post") Set<Comment> comments;
>         //...
>     }
>
>     @Entity
>     public class Comment {
>         @Id int id;
>         @ManyToOne Post post;
>         //...
>     }
> I need a query that will return all posts from db ordered by number of
> comments (`OneToMany` relation in `Post`).
> At first I thought this can be implemented with `JPQL` like:
>
>     SELECT p
>     FROM Post p
>     ORDER BY SIZE(p.comments) DESC
>
> But function `SIZE(...)` can not be used to be ordered by it in `JPQL`.
>
> So, I found about `JPA Criteria API`, and tried following:
>
>     CriteriaBuilder cb = em.getCriteriaBuilder();
>     CriteriaQuery<Post> cq = cb.createQuery(Post.class);
>     Root<Post> p = cq.from(Post.class);
>     cq.select(p);
>     cq.orderBy(cb.desc(p.get("comments")));
>     List<Post> resultList = em.createQuery(cq).getResultList();
>
> With this query I am not getting proper results. I am aware that I am
> missing getting `size` of the set 'comments', but don't know how to add
> that
> part. I am not really familiar with `JPA Criteria API`. How should this
> query look to get all posts ordered by size of its `comments` field(set)?
>
>
>
> --
> View this message in context:
> http://openjpa.208410.n2.nabble.com/JPA-Criteria-API-query-sorting-by-number-of-elements-in-collection-tp7585829.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>

Reply via email to