hibernate - Grails Row 被另一个事务更新或删除(或未保存值映射不正确)

标签 hibernate grails

这不是实际代码,而是重新创建我试图理解的错误的代码。

    //if this question has options
    if(question.options){

        //deleting all the options first
        def l = []
        l += question.options

        l.each { option ->
            question.removeFromOptions(option)
            option.delete(flush: true)
            }

    }



    //saving new options from the form
    if(params.options){

        for(po in params.options){

            question.addToOptions(new QuestionOptionSurvey(optionText: po))

        }

    }

因此,第一部分删除属于问题的现有选项,第二部分将新选项添加​​到问题中。请注意,这个 block 属于服务方法。因此,抛出的错误是“行已被另一个事务更新或删除(或未保存的值映射不正确)”。我知道已经有关于这个问题的帖子,但是即使在阅读了文档并且无法理解之后,我还是来到这里是为了更简单地解释这个错误的原因。为什么 grails 或 hibernate 阻止我先删除选项然后更新新选项?我感谢任何帮助。

最佳答案

你可以试试这个:

//saving new options from the form
if(params.options) {

    def options = []
    for(po in params.options){

        options << new QuestionOptionSurvey(optionText: po)

    }

   question.options = options

}

关于hibernate - Grails Row 被另一个事务更新或删除(或未保存值映射不正确),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28330886/

相关文章:

grails - Groovy 类型转换现奇怪

grails - 删除按钮在Grails的list.gsp中不起作用

java - Hibernate 中的 session.get() 和 session.byId().load() 有什么区别?

mysql - Grails 没有将域类保存在正确的数据库中

grails - 在Grails的TagLib中使用request.getSession(false)会引发异常

java - 使用 JPA 处理 Spring、Hibernate 中的脏读

Grails 3 - 在 Bootstrap.groovy 中读取类路径资源

java - 为什么会出现这个未处理的 org.apache.tiles.impl.CannotRenderException?

java.lang.NoClassDefFoundError : org/hibernate/mapping/MappedSuperclass

java - Getting WARN : SQL Error: 1205, SQLState : 41000 ERROR: Lock wait timeout exceeded; try restarting transaction. 使用hibernate保存记录