Index: lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/Message.hbm.xml =================================================================== diff -u -r2dbea686e81e6a5843328d8c0bd814b63e64d36f -r4927ee743a679c87a515436a0cc289b8bbc84ccd --- lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/Message.hbm.xml (.../Message.hbm.xml) (revision 2dbea686e81e6a5843328d8c0bd814b63e64d36f) +++ lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/Message.hbm.xml (.../Message.hbm.xml) (revision 4927ee743a679c87a515436a0cc289b8bbc84ccd) @@ -189,7 +189,7 @@ name="sessionClones" lazy="false" inverse="false" - cascade="all-delete-orphan" + cascade="none" sort="unsorted" > Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java =================================================================== diff -u -r2dbea686e81e6a5843328d8c0bd814b63e64d36f -r4927ee743a679c87a515436a0cc289b8bbc84ccd --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java (.../Message.java) (revision 2dbea686e81e6a5843328d8c0bd814b63e64d36f) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java (.../Message.java) (revision 4927ee743a679c87a515436a0cc289b8bbc84ccd) @@ -497,7 +497,7 @@ /** * @return the set of all messages cloned from this message. See getAuthoredParent(). * - * @hibernate.set cascade="all-delete-orphan" inverse="false" + * @hibernate.set cascade="none" inverse="false" * @hibernate.collection-key column="authored_parent_uid" * @hibernate.collection-one-to-many class="org.lamsfoundation.lams.tool.forum.persistence.Message" * Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r1ef4b877aea0883709c641351e07595c6be84361 -r4927ee743a679c87a515436a0cc289b8bbc84ccd --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 1ef4b877aea0883709c641351e07595c6be84361) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 4927ee743a679c87a515436a0cc289b8bbc84ccd) @@ -300,15 +300,23 @@ } public void deleteTopic(Long topicUid) throws PersistenceException { - List children = messageDao.getChildrenTopics(topicUid); + Message topic = messageDao.getById(topicUid); + // cascade delete children topic by recursive + List children = messageDao.getChildrenTopics(topicUid); if (children != null) { Iterator iter = children.iterator(); while (iter.hasNext()) { Message msg = (Message) iter.next(); this.deleteTopic(msg.getUid()); } } + + // recursively delete clones + for (Message clone : (Set) topic.getSessionClones()) { + this.deleteTopic(clone.getUid()); + } + messageSeqDao.deleteByTopicId(topicUid); messageDao.delete(topicUid); } @@ -708,7 +716,6 @@ } Forum toContent = Forum.newInstance(fromContent, toContentId, forumToolContentHandler); - forumDao.saveOrUpdate(toContent); // save topics in this forum, only save the author created topic!!! and reset its reply number to zero. Set topics = toContent.getMessages(); @@ -729,6 +736,8 @@ createRootTopic(toContent.getUid(), (ForumToolSession) null, msg); } } + + forumDao.saveOrUpdate(toContent); }