Grails找到域然后保存它

Grails找到域然后保存它

问题描述:

我想要做的是找到一个域,然后创建一个新域或保存预先存在的域。下面是我目前使用的代码(在这个项目中,骨架​​是包名):Grails找到域然后保存它

def save() { 
     Class lob = grailsApplication.getDomainClass('skeleton.'+params.lob.name) 
     def instance = lob.get(params.lob.id) 
     if (instance){ 
      params.data.each { name, value -> 
       if (instance.metaClass.hasProperty(name)){ 
        instance[name] = value 
       } 
      } 
     }else{ 
      instance = new lob() 
      params.data.each { name, value -> 
       if (instance.metaClass.hasProperty(name)){ 
        instance[name] = value 
       } 
      } 
     } 
    } 

这似乎并不奏效。任何人都可以帮我解决这个问题吗?

+1

ataylor低于为什么你的代码失败的原因,但你也应该看看'findOrCreateBy'格姆方法,这将让你干你的代码了不少。它要么返回一个现有的对象,要么实例化一个新的未保存的对象,你可以在其中填入值。 – 2012-07-11 22:43:47

通过getDomainClass返回的对象是GrailsDomainClass一个实例。要获得您可以拨打get的实际域名,请先拨打getClazz。例如:

Class lob = grailsApplication.getDomainClass('skeleton.'+params.lob.name).clazz 

此外,你就必须调用类对象上newInstance而不是使用new关键字来创建一个新的实例。

+0

为什么你需要调用'newInstance()'而不是使用'new'? – doelleri 2012-07-11 21:00:45

+1

'new'关键字需要一个类型的名字,但在这种情况下它是'Class'对象。 – ataylor 2012-07-11 21:09:41