您如何在Grails 3中运行时修改ID列的值?就我而言,我有一个表,该表具有由三列组成的复合主键。我手动指定了它们显示在编辑 View 中,并且我的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] }
}
}
...当我进入编辑 View 并编辑不属于键的属性时,它可以正确保存,但是当我更改其他属性之一时,我收到一条消息,指出Grails找不到以下项的AliasFreuqencyDict实例: ID空。我想问题是,一旦更改了其中一列,ID也会更改,Grails不知怎么不知道如何从对象曾经拥有的主键切换到新键。
那么,我应该如何修改 Controller 以允许编辑键的部分列呢?
最佳答案
(最明显的)问题是您查找要更新的问题的方式。如果您共享AliasFrequencyDict
的域模型,我可以更具体一些,但要说您有一个First
和Last
的复合键,以及一个实例[first:"John", last:"Doe"]
。
现在,您更新它以设置first=Jane
并按update ...您正在为“Jane Doe”创建一个新的AliasFrequencyDict
并在.get()
的查找中使用它,当然,这不会返回AliasFrequencyDict
的实例。如果要更改PK字段的值,则需要传入旧值以查找对象,然后相应地设置新值。
关于grails - 如何在Grails 3的编辑 View 中修改ID列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54943983/