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

时间:2015-02-04 20:32:38

标签: 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))

        }

    }

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

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

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

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

        options << new QuestionOptionSurvey(optionText: po)

    }

   question.options = options

}

答案 1 :(得分:0)

这应该是一个评论,但我没有50个代表。 如果您有使用要保存的对象属性的日志,请尝试删除它(即使它在保存之前出现)。