【问题标题】:Update HasMany Relation in Grails Controller在 Grails 控制器中更新 HasMany 关系
【发布时间】:2015-01-19 13:43:17
【问题描述】:

我有以下 grails 域类:

A {
 belongsTo = [b: B]
}

B {
 hasMany = [aClasses: A]
}

在 GSP 视图中,我有一个表单,用户可以在其中选择许多 A 实例以将它们与 B 实例连接。当用户提交表单时,处理表单的控制器会收到如下信息:

params: [aClasses: [123,124]]

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

这是我在控制器操作中所做的:

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)

}

有没有办法让它工作?

【问题讨论】:

    标签: grails grails-2.0


    【解决方案1】:

    这是在服务还是控制器中运行?我以前做过类似的事情,但逻辑在服务中并且有效。这种数据库访问应该在服务中运行,因为它们是事务性的。

    有效的例子是:

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

    【讨论】:

    • 它在控制器中运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多