【问题标题】:withTransaction and saving a lot of objects?withTransaction 并保存大量对象?
【发布时间】:2018-01-31 13:18:06
【问题描述】:

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

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 grails-orm


    【解决方案1】:

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

    如果您的方法使用@Transactional 或类进行注释,这是正确的。在你的情况下,尝试注释assignBibNumbers(),像这样

    @Transactional
    private def assignBibNumbers(Long id){...}
    

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 2012-06-27
      相关资源
      最近更新 更多