【发布时间】:2019-03-01 11:44:23
【问题描述】:
如何在 Grails 3 中允许在运行时修改 ID 列的值?就我而言,我有一个包含三列的复合主键的表。我手动指定它们出现在编辑视图中,我的 update() 方法代码如下所示:
@Transactional
def update(AliasFrequencyDict aliasFrequencyDict) {
aliasFrequencyDict = AliasFrequencyDict.get( new AliasFrequencyDict(params) )
if (aliasFrequencyDict == null) {
notFound()
return
}
aliasFrequencyDict.properties = params
try {
aliasFrequencyDict.save(insert: false, flush: true)
} catch (ValidationException e) {
respond aliasFrequencyDict.errors, view:'edit'
return
}
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.updated.message', args: [message(code: 'aliasFrequencyDict.label', default: 'AliasFrequencyDict'), aliasFrequencyDict.getPK()])
redirect(action: 'show', params: params)
}
'*'{ respond aliasFrequencyDict, [status: OK] }
}
}
...当我进入编辑视图并编辑不属于键的属性时,它会正确保存,但是一旦我更改其他属性之一,我就会收到一条消息,显示 Grails 找不到ID 为 null 的 AliasFreuqencyDict 实例。我猜问题是,一旦你改变了这样的列之一,ID 也会改变,而且 Grails 不知道如何从对象曾经拥有的主键切换到新的主键。
那么我应该如何修改控制器以允许编辑部分键列呢?
【问题讨论】:
标签: grails grails-orm grails-controller grails3