withTransaction并保存了很多对象?

问题描述 投票:1回答:1

在控制器方法中有以下代码块。

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()没有事务块就无法工作?循环中的保存是否总是包含在事务块中?我感谢任何帮助!谢谢!

hibernate grails transactions gorm
1个回答
0
投票

我认为即使没有包含在事务块中,保存仍然可以工作。

如果您的方法使用@Transactional或类注释,则会出现这种情况。在你的情况下,尝试注释assignBibNumbers(),就像这样

@Transactional
private def assignBibNumbers(Long id){...}
© www.soinside.com 2019 - 2024. All rights reserved.