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
))
我们在删除回复表记录时,发现删除失败,原因是:在主人回复表中仍然有记录引用待删除的回复这条记录。如果需要删除主表数据,需要首先删除子表数据。故我们需要:
-
删除回复
- 如果回复有关联的主人回复,需要先删除关联的主人回复
-
删除日志
-
删除日志,需要先删除关联的回复
-
删除回复,需要先删除关联的主人回复
-
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);
}
}