我有两个域类:

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映射时,这些特定的键(即此处的class属性)丢失了,因此GORM无法访问它们。

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

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

    domain1.save(flush: true)

关于grails - 更新单向一对一问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5978988/

10-12 00:32
查看更多