在休眠状态下,“发布”和“评论”实体之间存在一对多关系。一个帖子可以有很多评论(帖子)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();
}