我正在尝试通读dataBind文档,但并不是那么清楚:
http://grails.org/doc/2.1.0/ref/Controllers/bindData.html
我有一个由 4 列组成的复合 id,我需要更新其中一列。它拒绝 .save(),甚至不会抛出错误。是否有一些配置允许我更改这些值并保存模型?
如果我删除它并创建一个新记录,它会碰到我在浏览器端使用的数据表/jeditable 的 rowid,这不是一个真正的选择。但是,即使我用空列表包含所有参数:
def a = WaiverExemption.find("from WaiverExemption as e where e.exemptionRowId = ?", [params.rowid])
a.properties = params
bindData(a, params, [include: []])
a.save(flush: true, failOnError: true)
这似乎行不通。我还尝试单独命名列/属性,也使用"id"显式命名列/属性。
我对bindData()实际上做了什么感到困惑。仍然对此感到困惑。
如果你在 Grails 中有一个复合 id,并希望更改一个或多个列值,save() 永远不会按照问题中的建议执行。相反,您需要使用 .executeUpdate()。您可以传入更新(尽管 Web 上的大多数示例用于删除)相关表的 HQL,其语法几乎与正确的 SQL 相同。类似于"更新域d set d.propertyName = ?"之类的东西应该可以工作。
我不知道这是否是明智之举,或者它是否违反了Grails应用程序应该如何工作的哲学规则,但它实际上会进行更新。我建议谨慎和大量测试。这些废话对我来说都是巫毒教。