2014-03-12 178 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