grails - 在Grails Controller 中更新HasMany关系

标签 grails grails-2.0

我有以下grails域类:

A {
 belongsTo = [b: B]
}

B {
 hasMany = [aClasses: A]
}

在GSP View 中,我有一个表单,用户可以选择许多A实例来将它们与B实例连接。当用户提交表单时,处理该表单的 Controller 会收到如下内容:
params: [aClasses: [123,124]]

用户可能已经从B中删除了先前添加的aClasses,所以我尝试先清除B的aClasses,然后执行addTo,但得到了java.util.ConcurrentModificationException

这是我在Controller Action中执行的操作:
def update() {
B b = B.get(params.id)
b.properties = params
b.aClasses.clear()

def newAs = params.aClassIds ? [] + params.aClasses : []
newAs.each {
 A a = A.get(it)
 b.addToAClasses(a)
}
b.save(flush: true)

}

有没有办法使它起作用?

最佳答案

这是在服务或 Controller 中运行吗?我之前做过类似的事情,但是逻辑是在服务中并且可以正常工作。这种数据库访问应该在服务中运行,因为它们是事务性的。

工作的示例是:

    if(!clone.hasErrors())
    {
        def projectTasks = Task.withCriteria {
            project {
              eq('id', project_id.toInteger())
            }
          }
        projectTasks.each{ task -> 
            clone.addToTasks(task)
        }
    }

    clone.save(flush : true)

关于grails - 在Grails Controller 中更新HasMany关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026034/

相关文章:

java - Windows 上的 Grails 出错。无法找到有效的认证

unit-testing - 使用@PostConstruct 和 Spock 单元测试的不可测试的 grails (2.5.4) 服务

grails - 是否可以将命名查询元编程到 grails 域类上?

javascript - 将数据从.gsp发送到 Controller

hibernate - 为什么在Grails中使用此Spock规范会导致 'identifier of an instance of projectname.Event was altered from 1 to 2;'?

unit-testing - 如何为单元测试创​​建虚拟数据?

hibernate - Grails 2.1:如何使用 “schema-export export”?

grails - Amazon Cloud Web Services上的Grails应用程序 session 数据错误

grails - 从 grails 插件访问日志

java - ils。从远程服务器调用CURL后重定向不起作用