2

我正在尝试通读 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”明确命名列/属性。

4

1 回答 1

0

我对 bindData() 的实际作用感到困惑。对此仍然感到困惑。

如果您在 Grails 中有一个复合 id 并希望更改一个或多个列值,则 save() 将永远不会按照问题中的建议执行。相反,您需要使用 .executeUpdate()。您可以传入 HQL 以更新(尽管网络上的大多数示例都是用于删除)有问题的表,其语法几乎与正确的 SQL 相同。类似于“update domain d set d.propertyName = ?”的东西 应该管用。

我不知道这是否是明智之举,或者它是否违反了 Grails 应用程序应该如何工作的一些哲学规则,但它实际上会进行更新。我建议谨慎并进行大量测试。这废话对我来说都是巫术。

于 2012-09-25T15:43:20.093 回答