grails - 如何在Grails 3的编辑 View 中修改ID列的值?

标签 grails gorm grails-controller grails3

您如何在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的域模型,我可以更具体一些,但要说您有一个FirstLast的复合键,以及一个实例[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/

相关文章:

sql - Groovy 中的动态命名参数?

hibernate - Grails&Hibernate createCriteria在like子句中填充中间空格

grails - 等于grails中的域类

hibernate - Grails hibernate session 的打开/关闭和延迟初始化

Grails 2.3.3 命名空间 Controller 渲染 View

带有单独主 Controller View 的 Grails Controller 填充菜单

Grails 资源 : Bundle multiple modules to single file

grails - 部署在JBoss上的grails应用提供了404状态资源未找到

sql - 如何在 Grails/GORM 中将派生属性设置为小写?

grails - 如何在Grails Controller 中调用方法而不渲染新 View ?