1
在控制器方法中有以下代碼塊。withTransaction並保存很多對象?
def stat = ''
stat = assignBibNumbers(compositeEvent.id)
這裏是被稱爲在上面的代碼的私有函數:請注意,只有相關的部分顯示
private def assignBibNumbers(Long id){
...
def eventRange = bibsService.convertRangeStringToRangeList(compositeEvent.bibsRange)
for(int j=0; j<finRegsList.size(); j++){
finRegsList[j].raceParticipant.bibNumber = eventRange[j]
finRegsList[j].save()
}
return "Bib Setup Complete! No bib assignment was made."
}
保存不工作在上述情況下。沒有分配號碼。現在
,如果我的代碼的上述第一部分變爲
def stat = ''
RaceRegistration.withTransaction { status ->
stat = assignBibNumbers(compositeEvent.id)
}
它的作品!所以我非常困惑,爲什麼我應該在withTransaction塊中包裝函數。我甚至認爲即使沒有包裹在交易區塊中,保存仍然應該起作用。什麼導致save()在沒有事務塊的情況下無法工作?應該保存在一個循環中總是被封裝在一個事務塊中?我感謝任何幫助!謝謝!