这不是实际代码,而是重新创建我试图理解的错误的代码。
//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/