在一个Grails 2.1.0我试图动态更新的领域类的字段。 该对象被绑定,它看起来不错,直到保存方法被调用,它抛出以下异常:
java.lang.IllegalStateException:不能让一个不变的实体修改。
try {
def bindParams = [:]
bindParams."$paramsFieldName" = "$paramsValue"
def domainClass = grailsApplication.domainClasses.find { it.clazz.simpleName == paramsDomain }.clazz
def objectInstance = domainClass.findById(paramsId)
objectInstance."$paramsFieldName" = "$paramsValue"
bindData(objectInstance, bindParams)
objectInstance.save(flush:true ,failOnError:false)
return objectInstance
}
catch (Exception ex) {
log.error ex
return null
}
我试图通过直接分配新建分配FY绑定字段和运作良好。
objectInstance."$paramsFieldName" = convertToType( fieldType.name,paramsValue)
但然后我需要处理各种情况下(I假设)的类型转换。 我需要的是BindDynamicMethod处理我的绑定。 使用使是不可改变的BindDynamicMethod结合,当它发生的对象是什么? 或者有什么我做错了,是造成的呢?
================================================== =======
部分解决
原来,这是发生在一些领域,但有些在他们的映射使用缓存被扔这个异常。
class UploadSettings {
String profile = "default"
String displayName
String name
String value
String defaultValue
static mapping = {
//cache usage:'read-only'
}
}
所以我想我的问题是,如果一个域使用缓存,为什么不能我们更新它的价值呢? 或者,我们该怎么办呢? 有没有一种方法来捕捉如果域名是不可变的?
谢谢