如何在 Grails 3 的编辑视图中修改 ID 列的值?



如何在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 不知何故不知道如何从对象曾经拥有的主键切换到新键。

那么,我应该如何修改控制器以允许编辑键列呢?

这里(最明显的)问题是你查找要更新的那个的方式。如果您共享您的域模型以供AliasFrequencyDict我可以更具体,但假设您有一个FirstLast的组合键以及一个[first:"John", last:"Doe"]的实例。

现在您更新它以设置first=Jane并按更新... 您正在为"Jane Doe"创建一个新AliasFrequencyDict并将其用于查找.get(),当然这不会返回AliasFrequencyDict的实例。 如果要更改 PK 字段的值,则需要传入旧值以查找对象,然后相应地设置新值。

相关内容

  • 没有找到相关文章

最新更新