JavaWeb项目之QQ Zone:(五)级联删除

5.1 问题描述:

Cannot delete or update a parent row: a foreign key constraint fails(qqzonedb.t_host_reply, CONSTRAINT FK_host_reply FOREIGN KEY (reply) REFERENCES t_reply (id))
我们在删除回复表记录时,发现删除失败,原因是:在主人回复表中仍然有记录引用待删除的回复这条记录。如果需要删除主表数据,需要首先删除子表数据。故我们需要:

  1. 删除回复

    • 如果回复有关联的主人回复,需要先删除关联的主人回复
  2. 删除日志

    • 删除日志,需要先删除关联的回复

    • 删除回复,需要先删除关联的主人回复

5.2 解决方案

ReplyServiceImpl:

public class ReplyServiceImpl implements ReplyService {

    ReplyDAO replyDAO;
    HostReplyService hostReplyService;
    UserBasicService userBasicService;
    
	...

    @Override
    public void delReply(Integer replyId) {
        //在删除reply之前要删除其主人回复
        HostReply hostReply = hostReplyService.getHostReplyByReplyId(replyId);
        if(hostReply != null){
            hostReplyService.delHostReply(hostReply.getId());
        }
        replyDAO.delete(replyId);
    }
}

TopicServiceImpl:

public class TopicServiceImpl implements TopicService {
    TopicDAO topicDAO;
    ReplyService replyService;
    UserBasicService userBasicService;
    
	....
	
    @Override
    public void delTopic(Integer topicId) {
        // 在删除文章之前删除所有回复
        List<Reply> replyList = replyService.getReplyList(topicId);
        if(!replyList.isEmpty()){
            for (Reply reply : replyList) {
                replyService.delReply(reply.getId());
            }
        }
        topicDAO.delTopic(topicId);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值