gpt4 book ai didi

json - Grails:在映射构造函数中设置 transient 字段

转载 作者:行者123 更新时间:2023-12-02 00:25:12 25 4
gpt4 key购买 nike

我正在尝试将属性映射保留为单个 JSON 编码列,如 this question 中所示.

我遇到的问题是显然无法在默认 map 构造函数中设置 transient 属性。给定任何 transient 场:

class Test {
//...
String foo
static transients = ['foo']
}

看起来映射构造函数(Grails 以各种方式重写)只是丢弃 transient 字段:

groovy:000> t = new Test(foo:'bar')
===> Test : (unsaved)
groovy:000> t.foo
===> null

虽然直接赋值(通过 setter 方法)按预期工作:

groovy:000> c.foo = 'bar'
===> bar
groovy:000> c.foo
===> bar

有没有办法让 map 构造函数接受 transient 字段?

<小时/>

或者更确切地说:是否有更好的方法将 Map 持久保存为单个 JSON 编码的数据库字段,而不是 linked question 中显示的方法?

这是完整的示例:

import grails.converters.JSON

class JsonMap {
Map data
String dataAsJSON

static transients = ['data']
def afterLoad() { data = JSON.parse(dataAsJSON) }
def beforeValidate() { dataAsJSON = data as JSON }
}

我可以使用 setter 设置data(然后将其转换为dataAsJSON),但不能使用 map 构造函数。

最佳答案

GORM 中的 map 构造函数使用数据绑定(bind)机制,默认情况下 transient 属性不可进行数据绑定(bind)。但您可以使用 bindable constraint 覆盖它

class Test {
//...
String foo
static transients = ['foo']

static constraints = {
foo bindable:true
}
}

关于json - Grails:在映射构造函数中设置 transient 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com