PostWithCommentsCountDTO

PostWithCommentsCountDTO

在休眠状态下,“发布”和“评论”实体之间存在一对多关系。一个帖子可以有很多评论(帖子)1-N(评论),因此评论持有要发布的外键(post_id)。问题是,当我为控制器获取帖子列表时,我还希望在每个帖子中都包含分配给该帖子的COMMENTS数。因此,如果有一些帖子列表,我想附加到该帖子下方的评论数据数。

我创建了PostWithCommentsCountDTO,它具有可以容纳注释数量的其他字段,已经完成了转换器等工作。

但是我应该在哪里以及如何实际获取评论数,我该如何实际做呢?

整个架构看起来像这样
控制器-PostWithCommentsCountDTO-PostService-PostRepository-Post
控制器-CommentDTO-CommentService-CommentRepository-Comment

最佳答案

请阅读要点15.6 here
您可以使用PostWithCommentsCountDTO的所有字段创建构造函数。之后,您可以在HQL查询中使用它,如我添加的链接中所述。在查询中,您可以按“ post_id”将“帖子”和“评论”连接起来,按“ post_id”将它们分组,并在select语句中使用count(post_id)。
因此,您的查询将类似于:

select new PostWithCommentsCountDTO (p.id, /and all other fields.../ , count(post_id)) from Post as p left join Comments as c on p.id=c.post_id where /some where statement if needed .../ group by c.post_id


这意味着您可以在存储库级别收集DTO:

public List<PostWithCommentsCountDTO> getWithCommentsCount(...){
     return (List<PostWithCommentsCountDTO>) getSession().createQuery(...).setParameter(...).list();
}

09-26 19:28