hibernate - 强制GORM将一对一关系视为独立关系

标签 hibernate grails groovy gorm

我有一个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必须与valueOf中的MyParameterValue同步一样,

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

进入:

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

  • 更新

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

    最佳答案

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

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

    但是,这需要您自己完成所有垂直处理。

    关于hibernate - 强制GORM将一对一关系视为独立关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027576/

    相关文章:

    hibernate - Spring-boot & hibernate,使用事务

    grails - PooledConnection 已关闭多个数据源的错误

    jquery - 如何通过geb测试select2

    arrays - Elasticsearch 观察者电子邮件数组值

    android - 如何根据 Gradle 脚本中的环境变量动态编辑 Android Manifest 文件

    sql - Hibernate SQL 转换对于 Enum 字段类型失败

    java - 通过时间戳创建,让数据库管理它更好,还是让应用程序管理更好?

    java - JPA - 是否可以将结果作为 @MappedSuperclass 的实例获得?

    tomcat - Grails 2.3.4 池为空。无法在 30 秒内获取连接

    documentation - SoapUI Groovy API 文档