我正在尝试将属性的Maps保留为单个JSON编码的列
我遇到的问题是,显然 无法在默认地图构造函数中设置瞬时属性 。给定任何瞬态场:
class Test { //... String foo static transients = ['foo'] }
似乎地图构造函数(Grails以各种方式覆盖)只是丢弃了瞬态字段:
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比链接的问题中显示的方法更好的方法来将a保留为单个JSON编码的DB字段?
Map
这是完整的示例:
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 } }
我可以data使用setter进行设置(然后将其转换为dataAsJSON),但不能使用map构造函数。
data
dataAsJSON
GORM中的地图构造函数使用数据绑定机制,并且默认情况下,瞬态属性不可进行数据绑定。但是您可以使用可绑定约束来覆盖它
class Test { //... String foo static transients = ['foo'] static constraints = { foo bindable:true } }