0

当我在 Grails 中使用 RestfulController 保存对象的数据时,如何防止客户端将更改应用到相关的子对象?

给定以下域类:

class Language {
    String name
}

class TranslationText {
    Language language
    String text
}

以及 TranslationText 的以下 POST 数据:

{
    "language": { "id": 1, "name": "InvalidName" },
    "text": "Some Text"
}

在这里,我想引用一个现有的语言资源(ID=1),但我不希望客户端更改名称。

如何使用文本和语言(基于 ID)保存此资源,但丢弃无效的语言名称属性?

我想以尽可能最小的方式修改 RestfulController,尽可能地保留默认行为。

4

1 回答 1

0

我认为您需要配置“级联”映射属性。这将告诉 GORM 驱逐链接的实例,因此它不会在 Hibernate 会话中,更改为新名称并刷新到 DB:

class TranslationText {
    Language language
    String text

    static mapping = {
        language cascade: 'evict'
    }
}

参考:http ://docs.grails.org/3.1.x/ref/Database%20Mapping/cascade.html

于 2017-10-02T16:05:16.583 回答