更新方法不会保存到Grails中的数据库

时间:2019-02-28 09:42:03

标签: java grails orm gorm grails3

我正在尝试编写自定义的自定义控制器,该控制器将允许我在Grails 3.3.8中处理带有复合键的表。我拥有的一个这样的表称为AliasFrequencyDict,因此我在控制器中创建了这样的方法:

@Transactional
def update(AliasFrequencyDict aliasFrequencyDict) {

    aliasFrequencyDict = AliasFrequencyDict.get( new AliasFrequencyDict(params) )

    if (aliasFrequencyDict == null) {
        notFound()
        return
    }

    try {
        aliasFrequencyDict.save(insert: false, flush: true, failOnError: 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] }
    }
}

这似乎应该起作用-当我在编辑视图中更改某些内容并提交时,我正确地重定向到了show操作,我收到通知成功更新的Flash消息,URL为{{1 }},但是数据库本身中的记录没有任何变化。为什么呢?这里可能有什么问题?

1 个答案:

答案 0 :(得分:0)

好吧,事实证明,这个问题比看起来简单得多-在保存之前将参数明确地写入属性就足以解决该问题!因此,我们只需这样做:

...
if (aliasFrequencyDict == null) {
            notFound()
            return
        }

aliasFrequencyDict.properties = params /* <===== here! */

try {
    aliasFrequencyDict.save(insert: false, flush: true)
...

...而且有效!