使用三大框架做project时遇到这个问题:
这是使用的三张表User Topic Reply
User对 Topic是一对多。
User对Reply是一对多。
Topic对Reply是一对多。
工程中我的目的是根据id删除topic(主题),结果就报了题目中所写的关于hibernate的错误。
解决的办法如下:
//根据id删除Topic(重点是:解除一切与所要删除对象的联系以及注意它对别的实体的影响)
public void deleteTopicById(Long id) {
Session session = factory.getCurrentSession();
Topic topic=(Topic) session.get(Topic.class,id);
//获取topic所属的User
User user=(User) session.get(User.class, topic.getUser().getId());
//将topic从自己所属的user中移除
user.getTopics().remove(topic);
//解除user和因为删除topic失去联系的reply关系
user.getReplys().removeAll(topic.getReplys());
//解除topic和reply的关系
/*topic.getReplys().removeAll(topic.getReplys());*/ //这句不写也可,可能因为它是最底层被级联的对象的原因
session.delete(topic);
}
deleted object would be re-saved by cascade
原文:http://blog.csdn.net/xingshen100/article/details/19133129