评论回复

创建回复表结构如下:

jpa+springboot,查询每个评论的回复代码如下:

@Override
    public List<Reply> queryList(ReplyQueryRequest parameter) {
        List<Reply> list1 = replyRepository.findList(parameter);
        List<Reply> list2 = new ArrayList<>();
        for (Reply reply : list1){
            List<Reply> list3 = new ArrayList<>();
            if (null == reply.getReply()){
                if (null == parameter.getAuditStatus()) {
                    list3 = replyRepository.findByReplyIdAndDeletedOrderByReleaseTimeAsc(reply.getId(), false);
                } else {
                    list3 = replyRepository.findByReplyIdAndAuditStatusAndDeletedOrderByReleaseTimeAsc(reply.getId(), parameter.getAuditStatus(), false);
                }

                list2.add(reply);
                Boolean flag = true;
                while (flag){
                    List<Reply> list4 = new ArrayList<>();
                    for (Reply reply1 : list3){
                        List<Reply> list5 = new ArrayList<>();
                        if (null == parameter.getAuditStatus()) {
                            list5 = replyRepository.findByReplyIdAndDeletedOrderByReleaseTimeAsc(reply1.getId(), false);
                        } else {
                            list5 = replyRepository.findByReplyIdAndAuditStatusAndDeletedOrderByReleaseTimeAsc(reply1.getId(), parameter.getAuditStatus(), false);
                        }

                        list2.add(reply1);
                        if(list5.size()>0){
                            list4.addAll(list5);
                        }
                    }
                    if (list4.size()>0){
                        list3.clear();
                        list3.addAll(list4);
                    }else {
                        flag=false;
                    }
                }
            }
        }

        return list2;
    }

这是findList()方法实现代码:

public class ReplyRepositoryImpl extends AbstractCustomRepositoryImpl implements ReplyRepositoryCustom {
    @Override
    public List<Reply> findList(ReplyQueryRequest parameter) {
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<Reply> query = cb.createQuery(Reply.class);
        Root<Reply> mappingRoot = query.from(Reply.class);
        query.select(mappingRoot);
        List<Predicate> predicates = new ArrayList<Predicate>();

        predicates.add(cb.equal(mappingRoot.get("deleted"), false));
        if (!StringUtils.isEmpty(parameter.getAuditStatus())) {
            predicates.add(cb.equal(mappingRoot.get("auditStatus"), parameter.getAuditStatus()));
        }
        if (CheckUtils.available(parameter.getCommentsId())) {
            Comments comments = new Comments();
            comments.setId(parameter.getCommentsId());
            predicates.add(cb.equal(mappingRoot.get("comments"), parameter.getCommentsId()));
        }
        if (CheckUtils.available(parameter.getReplyId())) {
            Reply reply = new Reply();
            reply.setId(parameter.getReplyId());
            predicates.add(cb.equal(mappingRoot.get("reply"), parameter.getReplyId()));
        }
        if (CheckUtils.available(parameter.getTopicUserId())) {
            AppUser appUser = new AppUser();
            appUser.setId(parameter.getTopicUserId());
            predicates.add(cb.equal(mappingRoot.get("topicUser"), parameter.getTopicUserId()));
        }

        List<Order> orderList = new ArrayList();
        orderList.add(cb.asc(mappingRoot.get("releaseTime")));

        query.orderBy(orderList);
        query.where(predicates.toArray(new Predicate[]{}));

        TypedQuery<Reply> typedQuery = entityManager.createQuery(query);
        return typedQuery.getResultList();

    }
}

但是获取的回复内容是是分级的,比如1级下面如果有两个2级回复,那么就会先将2级回复放到1级下面后,在根据2级查询是否有3级的回复。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值