【问题标题】:Force GORM to treat one-to-one relationships as independent强制 GORM 将一对一关系视为独立的
【发布时间】:2012-04-05 11:19:30
【问题描述】:

我有一个MyParameter 类和一个MyParameterValue 类定义如下:

class MyParameter {
  MyParameterValue defaultValue

  static belongsTo = [anotherObject: AnotherDomainClass]
}

class MyParameterValue {
  MyParameter valueOf
}

我的问题是 GORM 坚持将这种关系视为一对一的关系,并带有反向引用,这不是我想要的。它对如何更新参数有影响。

例子:

    def param = new MyParameter(defaultValue: new MyParameterValue()).save()
    def paramVal = new MyParameterValue (valueOf: param).save()
    assert param.defaultValue != paramVal

此代码引发AssertionFailure。所以发生了什么事?虽然应该清楚我并不是要修改第二行的param 的默认值,但GORM 更新它好像defaultValue 必须与MyParameterValue 中的valueOf 同步,

所以 GORM 实际上改变了我想要的:

进入那个:

这是我的两个问题:

  • 如果从类型的角度来看,看起来像反向引用的所有引用都被视为一对一关系,那么 hasOne 关键字的目的是什么?
  • 如何强制 GORM 不将 valueOf 视为 defaultValue 的反向引用?请注意,我不想更改级联行为:更改 MyParameterdefaultValue 应该是级联的。

更新

我仍然对上述问题的答案感兴趣。我使用的解决方案是给默认值他们自己的类MyDefaultValue。如您所料,MyParameterValue 是一个复杂的结构,我一直在寻找一种方法来避免重复此结构。

【问题讨论】:

    标签: hibernate grails groovy grails-orm


    【解决方案1】:

    如果您不想要任何反向引用,但想手动处理所有关系,我想我会这样定义我的对象:

    class MyParameter {
      MyParameterValue defaultValue
    
      static constraints {
         defaultValue nullable: true
      }
    }
    
    class MyParameterValue {
      MyParameter valueOf
    
      static constraints {
         valueOf nullable: true
      }
    }
    

    但这要求你自己做所有的管道。

    【讨论】:

    • 好的,我不知道nullable 对反向引用有影响。我会试试的。
    • 在我的例子中,关系中没有belongsTo。
    • 我刚刚在两种关系中都尝试了nullable: true,但行为与我的问题完全相同(关系在 MyParameter 中更新)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多