我在Grails中遇到了事務問題。我想通過每個對象的檢查條件將對象列表保存到數據庫。我想把所有這些過程放到一個事務中,這意味着如果第k個對象不滿足檢查條件,所有先前的對象(從第一個對象到第(k-1)個對象)將從DB回滾。這是我的例子:在Grails服務中保存很多對象時的事務
static transactional = true
public void saveManyPeople() {
// ...
List<People> peoples = new ArraysList();
for(i = 0, i < n, i++) {
People newPeople = createPeopleFromRawData(); // return a people object in memory
if(<checking-condition>) {
newPeople.save(flush : false)
} else {
throw new MyCustomizedException() // MyCustomizedException has extended from RuntimException
}
}
// ...
}
正如你可能會看到,我設置交易變量設置爲true,我試着使用沖水:true和沖洗:假的,但我想它沒有工作。我讀過這篇文章Rolling back a transaction in a Grails Service 而且作者建議服務方法應該拋出一個RuntimeException,然後該進程將被回滾。但是如果我想拋出另一個異常,那我該怎麼辦? 您能否就這個問題給我一些建議? 非常感謝!
它是如何工作呢?你從哪裏打來電話,是否可以通過其他服務撥打? – 2011-04-04 13:35:09
嗨,維克多,函數saveManyPeople()在我的服務類中,這個函數將從控制器調用,而不是從另一個服務類。謝謝! – 2011-04-04 16:37:21