这不是实际的代码,而只是重新创建我想要理解的错误的代码。
//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阻止我首先删除选项然后更新新选项?我感谢任何帮助。
答案 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个代表。 如果您有使用要保存的对象属性的日志,请尝试删除它(即使它在保存之前出现)。