【问题标题】:update unidirectional one to one problem更新单向一对一问题
【发布时间】:2011-05-12 13:47:49
【问题描述】:

我有两个域类:

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 不理解映射..

感谢您的帮助。

【问题讨论】:

  • save(flush: true, failOnError: true) 替换save(flush: true) 然后发布抛出的异常(如果有的话)
  • @Don 我已经用 save(flush: true, failOnError: true) 替换了 save(flush: true) ...它没有抛出任何异常,也没有更新 domain1 对象..跨度>
  • 我试图用 save(flush: true, failOnError: true, deepValidate: false) 替换 save(flush:true) 并得到 NullPointerException 异常:错误 gorm.SavePersistentMethod - 无法获取属性“类”在空对象 java.lang.NullPointerException:无法在 org.codehaus.groovy.runtime.InvokerHelper.getProperty( InvokerHelper.java:156) 在 org.codehaus.groovy.runtime.callsite.PojoMetaClassGetPropertySite.ca //--

标签: grails groovy associations hbase


【解决方案1】:

鉴于您在评论中提供的例外情况,我认为问题出在您调用domain1.properties=params 的那一行。域属性映射包含一些特定的键,当您将 params 映射分配给它时,那些特定的(即此处的 class 属性)丢失了,因此 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)

【讨论】:

  • jjczopek 在明确将 domain2 值设置为 domain1 ( domain1.domain2 = domain2) 后它会起作用,但我不想再向 db 发送请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多