В репозитории сущности Category создаете метод типа getCategory, где создаете подобный запрос.
Вот только сортировка и количество разных под-коллекций одним запросом не получится.
Как вариант - потом делать пагинацию и фильтрацию полученного результата.
public function getCategory()
{
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$queryBuilder
->select('category')->from($this->getClassName(), 'category')
->addSelect('c_categoryHasPosts')->leftJoin('category.categoryHasPosts', 'c_categoryHasPosts')
->addSelect('c_cHasP_post')->leftJoin('c_categoryHasPosts.post', 'c_cHasP_post')
->addSelect('c_cHasP_p_postHasComments')->leftJoin('c_cHasP_post.postHasComments', 'c_cHasP_p_postHasComments')
->addSelect('c_cHasP_p_pHasC_comment')->leftJoin('c_cHasP_p_postHasComments.comment', 'c_cHasP_p_pHasC_comment')
->setParameter('categoryId', 1)
->setParameter('postId', 1)
->andWhere('c_cHasP_post.category_id = :categoryId')
->orWhere('c_cHasP_p_pHasC_comment.post_id = :postId')
return $queryBuilder->getQuery()->getResult();
}