Grails数据绑定-无法使不可变实体可修改

Grails数据绑定-无法使不可变实体可修改,grails,groovy,gorm,Grails,Groovy,Gorm,在Grails2.1.0上,我试图动态更新域类上的字段。对象被绑定并且看起来很好,直到调用save方法,该方法引发以下异常: java.lang.IllegalStateException:无法使不可变实体可修改。 我试着用直接分配的方法把田地捆起来,效果很好 objectInstance."$paramsFieldName" = convertToType( fieldType.name,paramsValue) 但是接下来我需要处理每种情况的类型转换(我假设)。我需要的是BindDynam

在Grails2.1.0上,我试图动态更新域类上的字段。对象被绑定并且看起来很好,直到调用save方法,该方法引发以下异常:

java.lang.IllegalStateException:无法使不可变实体可修改。 我试着用直接分配的方法把田地捆起来,效果很好

objectInstance."$paramsFieldName" = convertToType( fieldType.name,paramsValue)
但是接下来我需要处理每种情况的类型转换(我假设)。我需要的是BindDynamicMethod为我处理绑定。当使用BindDynamicMethod将对象绑定为不可变时,对象会发生什么情况?。或者我做错了什么导致了它

=========================================================

部分解决 事实证明,这发生在一些域上,但一些在映射中使用缓存的域引发了此异常

class UploadSettings {
    String profile = "default"
    String displayName
    String name 
    String value 
    String defaultValue 

    static mapping = {
        //cache usage:'read-only'

    }
}
所以我想现在我的问题是,如果一个域正在使用缓存,为什么我们不能更新它的值?或者我们怎么做?如果域是不可变的,有没有办法捕获


谢谢

是的,通过将其设置为只读,您正在使对象不可变,正如错误所说,这是误导性的,因为我们在缓存上下文中,但这背后有一些基本原理

如果您需要在域级别进行缓存,那么将其设置为读写就可以了

class UploadSettings {
    String profile = "default"
    String displayName
    String name 
    String value 
    String defaultValue 

    static mapping = {
        //cache usage:'read-only'

    }
}