在控制器方法中有以下代码块。
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()没有事务块就无法工作?循环中的保存是否总是包含在事务块中?我感谢任何帮助!谢谢!
答案 0 :(得分:0)
我认为即使没有在事务块中包装,保存仍然可以正常工作。
如果您的方法使用@Transactional
或类注释,则为true。在您的情况下,请尝试注释assignBibNumbers()
,如此
@Transactional
private def assignBibNumbers(Long id){...}