hibernate - withTransaction 并保存大量对象?

标签 hibernate grails transactions grails-orm

在 Controller 方法中是以下代码块。

def stat = ''

    stat = assignBibNumbers(compositeEvent.id)

这是上面代码中调用的私有(private)函数: 请注意,仅显示了相关部分
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 block 中。我认为即使没有包含在事务 block 中,保存也应该仍然有效。是什么导致 save() 在没有事务 block 的情况下无法工作?是否应该将循环中的保存始终包装在事务 block 中?我很感激任何帮助!谢谢!

最佳答案

I thought even without wrapping in in transaction block the save should still work.



如果您的方法使用 @Transactional 注释,这是正确的。 ,或类。在您的情况下,请尝试注释 assignBibNumbers() , 像这样
@Transactional
private def assignBibNumbers(Long id){...}

关于hibernate - withTransaction 并保存大量对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45831427/

相关文章:

java - JSP 在 tomcat 上找不到类错误 org.hibernate.Session

grails - Google API:阅读文档

Grails,存储应用程序自己的设置(单域类?)

grails - 休眠/域NullPointerException?

Java sql 事务。我究竟做错了什么?

事务内的 MySql 空约束冲突

java - JMS回滚有多可靠?

java - hibernate 生成查询,无需所有外连接获取

java - 如何通过使用 Spring Data 调用存储过程来选择实体

java - 具有 @ManyToMany 关系且无导航的 JPA 查询