更新单向一对一问题

发布于 2024-11-06 23:22:03 字数 1658 浏览 2 评论 0原文

我有两个域类:

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 插件。

PS hbase 不理解映射..

感谢您的帮助。

I have two domain classes:

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
    }
  }
}

My problem is when I create associated objects,I cannot update domain1.

I think reason maybe in save() method... maybe not

Is there anyone who know why I cannot update Domain1 properties ?

I use grails-1.3.2 and hbase-0.2.4 plugin.

P.S. hbase does not understand mapping..

Thanks for help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

携君以终年 2024-11-13 23:22:03

鉴于您在评论中提供的异常,我认为问题出在您调用 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)

Given the exception you provided in the comment, I think the problem is the line where You call domain1.properties=params. Domain properties map contain some specific keys, and when you assign params map to it, those specific (ie. class property here) are missing, so GORM cant access them.

Use bind() method to bind parameter values to your domain object this way:

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

    domain1.save(flush: true)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文