spring - 您能否在 Grails 中对复合 id 进行数据绑定(bind),使其(或其中的一部分)变得可更新?

标签 spring hibernate grails grails-orm

我正在尝试通读 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()。您可以传入 HQL 以更新(尽管网络上的大多数示例都是用于删除)有问题的表,其语法几乎与正确的 SQL 相同。类似于“update domain d set d.propertyName = ?”的东西应该管用。

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

关于spring - 您能否在 Grails 中对复合 id 进行数据绑定(bind),使其(或其中的一部分)变得可更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485755/

相关文章:

java - Spring Security - 编码密码看起来不像 BCrypt

Java Spring Web 服务客户端故障处理

java - 配置 Hibernate 以适应现有的数据库约束?

grails - 在 grails 中保存具有多对多关系的对象

url - 如何在 grails 中使用 POST 重定向到外部 URL

java - 使用普通旧式 XML (POX) 创建 Spring Web 服务

java - Hibernate 生成的查询

java - hibernate原生SQL查询错误

java - 在 hibernate-core-4.3.0.Beta5.jar 中获取 SessionFactory

grails - 用1:m关系中的列表进行分页