Grails 更新单向一对一问题

Grails 更新单向一对一问题,grails,groovy,associations,hbase,Grails,Groovy,Associations,Hbase,我有两个域类: class Domain1 { String val11 String val12 Domain2 domain2 static constraints = { } } class Domain1Controller{ /** * Create new Domain1 entity instance */ def create = { def domain1 = new Domain1() def domain2 =

我有两个域类:

class Domain1 {

  String val11
  String val12
  Domain2 domain2

  static constraints = {
  }
}

class Domain1Controller{

  /**
   * Create new Domain1 entity instance
   */
  def create = {
    def domain1 = new Domain1()
    def domain2 = Domain2.get(params.domain2)
    if(domain2!=null){
      domain1.domain2 = domain2
    }

    domain1.properties=params
    domain1.save(flush: true)

    String strJson = (domain1 as JSON)
    render strJson
  }

  /**
   * Update Domain1 entity fields values
   */
  def update = {
    Domain1 domain1 = Domain1.findById(params.id)
    params.remove("id")
    if (domain1 != null) {
      domain1.properties=params
      domain1.save(flush:true)
      String strJson = (domain1 as JSON)
      render strJson
    }
  }
}

class Domain2 {

  String val21
  String val22

  static constraints = {
  }
}

class Domain2Controller{

  /**
   * Create new Domain2 entity instance
   */
  def create = {
    def domain2 = new Domain2()          
    domain2.properties=params
    domain2.save(flush:true)
    String strJson = (domain2 as JSON)
    render strJson
  }

  /**
   * Update Domain2 entity fields values
   */
  def update = {
    Domain2 domain2 = Domain2.findById(params.id)
    params.remove("id")
    if (domain2 != null) {
      domain2.properties=params
      domain2.save(flush: true)
      String strJson = (domain2 as JSON)
      render strJson
    }
  }
}
我的问题是,当我创建关联对象时,我无法更新domain1

我想原因可能在
save()
方法中。。。也许不是

有人知道我为什么不能更新Domain1属性吗

我使用grails-1.3.2和hbase-0.2.4插件

附注:hbase不理解映射


谢谢您的帮助。

鉴于您在评论中提供的例外情况,我认为问题在于您调用
domain1.properties=params
的行。域属性映射包含一些特定键,当您将
params
map分配给它时,这些特定键(即
class
property)将丢失,因此GORM无法访问它们

使用bind()方法以以下方式将参数值绑定到域对象:

    def domain1 = new Domain1()
    bind(domain1, params)
    def domain2 = Domain2.get(params.domain2)
    if(domain2!=null){
      domain1.domain2 = domain2
    }

    domain1.save(flush: true)

save(flush:true)
替换为
save(flush:true,failOnError:true)
然后发布引发的异常(如果有)@Don我已将save(flush:true)替换为save(flush:true,failOnError:true)…它没有引发任何异常,也没有更新domain1对象..我已尝试将save(flush:true)替换为save(flush:true,failOnError:true,deepValidate:false)和get-NullPointerException异常:错误gorm.SavePersistentMethod-无法在null对象java.lang.NullPointerException上获取属性“class”:无法在org.codehaus.groovy.runtime.NullObject.getProperty上获取null对象的属性“class”(NullObject.java:56)在org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:156)在org.codehaus.groovy.runtime.callsite.PojoMetaClassGetPropertySite.ca/--jczopek,在明确地将domain2值设置为domain1(domain1.domain2=domain2)之后,它可以工作,但我不想再向db发送一次请求。