Criando consulta à API de Critérios JPA - classificando por número de elementos na coleção
Estou com problemas ao criar uma consulta com a API de critérios JPA.
Entidades e propriedades significativas:
@Entity
public class Post {
@Id int id;
@OneToMany (mappedBy = "post") Set<Comment> comments;
//...
}
@Entity
public class Comment {
@Id int id;
@ManyToOne Post post;
//...
}
Preciso de uma consulta que retorne todas as postagens do banco de dados ordenadas pelo número de comentários (OneToMany
noPost
) No começo, pensei que isso pudesse ser implementado comJPQL
gostar:
SELECT p
FROM Post p
ORDER BY SIZE(p.comments) DESC
Mas funçãoSIZE(...)
não pode ser usado para ser solicitado por ele emJPQL
.
Então, eu descobri sobreJPA Criteria API
e tentei o seguinte:
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();
Com esta consulta, não estou obtendo resultados adequados. Estou ciente de que sinto falta de conseguirsize
do conjunto 'comentários', mas não sabe como adicionar essa parte. Eu não estou realmente familiarizado comJPA Criteria API
. Como deve ser essa consulta para obter todas as postagens ordenadas pelo tamanho de suacomments
campo (conjunto)?