您能否在 Grails 中对复合 ID 进行数据绑定,使其(或其部分)可更新



我正在尝试通读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应用程序应该如何工作的哲学规则,但它实际上会进行更新。我建议谨慎和大量测试。这些废话对我来说都是巫毒教。

最新更新