2014-03-12 93 views
1

我正在使用mongodb with spring mvc作为REST API。我有一个控制器,为事件添加评论。该控制器使用我的事件服务的方法。下面是它们的实现。但是在我看来,如果我的mongodb连接没有transaction。我有1 insert1 update在我的控制器添加评论。如果事件更新抛出错误,请求提交插入。为什么它没有回滚?我该如何解决这个问题?MongoDB的弹簧数据

public Comments addComment(Comments comment) throws Exception{ 
    comment.setCommentDate(SowUtil.getDateTimeDB()); 
    comment.setCommenter(personService.findPersonById("531cc90e3c37b20bef47dfc7")); 
    mongoTemplate.insert(comment); 
    Events adv = findEventById(comment.getEventId()); 
    adv.addComment(comment); 
    eventService.save(adv); 
    return comment; 
} 

回答

0

MongoDB与RDBMS没有相同的事务概念。根据你的例子,它看起来像你正在使用两个文件。

MongoDB有关于涉及多个文档的两阶段提交模式的文章( http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/)。也许,这可以帮助你实现回滚?

我相信Spring也有一个MongoDB事务支持的概念(http://docs.spring.io/spring-integration/reference/html/mongodb.html)。

+0

老实说,我很惊讶。它应该保持在请求和响应周期之间的所有提交事务。您提供的第一个链接是一种解决方法,它会减慢我的系统。我认为必须有一个解决方案。我继续搜索 – Emilla

+0

或者,也许你可以建议更好的数据表示为我的模型上述。正如你可以从我的问题中看到的,事件和评论之间存在OnetoMany关系。这就是为什么我认为我应该有2个文件。你建议我应该有1个文档,而不是 – Emilla

+0

在更改数据模型之前,有一个特别的原因,你不想使用RDBMS?另外,你看看Spring的事务同步功能吗? – ChristopherZ