2

我有一个 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必须与valueOfin同步一样MyParameterValue

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

两个相反方向引用的 UML 示例

进入那个:

双边一对一关系的UML示例

这是我的两个问题:

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

更新

我仍然对上述问题的答案感兴趣。我使用的解决方案是给默认值他们自己的类MyDefaultValue。正如你可能猜到的那样,MyParameterValue它是一个复杂的结构,我一直在寻找一种方法来避免重复这种结构。

4

1 回答 1

0

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

class MyParameter {
  MyParameterValue defaultValue

  static constraints {
     defaultValue nullable: true
  }
}

class MyParameterValue {
  MyParameter valueOf

  static constraints {
     valueOf nullable: true
  }
}

但这要求您自己完成所有工作。

于 2012-04-06T06:39:40.477 回答