【问题标题】:How can I have an optional one-to-one relationship in GORM?如何在 GORM 中建立可选的一对一关系?
【发布时间】:2012-02-21 18:37:07
【问题描述】:

我有 2 个对象,ObjectAObjectB

ObjectA 被创建时,ObjectB 还不存在(并且不能,因为还没有数据)。

一旦ObjectB 被创建,它需要有一个对应的ObjectA 附加到它上面如果存在一个合适的。如果没有合适的ObjectA,那么新的ObjectB 根本就没有连接到一个。

因此,所有ObjectA 实例最终都将附加到ObjectB,但并非所有ObjectB 实例都将具有ObjectA

本质上,我正在寻找 GORM 来构建这样的数据库表:

ObjectA
- Id (NotNull, unique)
- ObjectB_Id[FK: ObjectB.Id] (unique)

ObjectB
- Id (NotNull, unique)

我怎样才能把 GORM 域类放在一起来做到这一点?

我几乎尝试了hasOnebelongsTo、原始属性、nullable: trueunique: true 约束的所有组合,但我必须缺少一个。这似乎不是一个特别奇怪的场景,所以必须有一些方法来完成这个。

【问题讨论】:

    标签: grails grails-orm one-to-one grails-domain-class


    【解决方案1】:

    通常情况下,将我的想法整合到一个问题中会引导我找到解决方案:

    Class ObjectA {
        ObjectB objectB
    
        static constraints = {
            objectB nullable: true, unique: true
        }
    }
    
    Class ObjectB {
        static belongsTo = [objectA: ObjectA]
    
        static constraints = {
            objectA nullable: true
        }
    }
    

    我似乎无法解决的唯一问题是可以将ObjectB.objectA 设置为已经与ObjectB 关联的ObjectA。保存新关联时,GORM 只是不保存关联。不会引发任何错误,并且将新的 ObjectB 从数据库中拉出会使其 objectA 属性未设置。

    ObjectB 类中将unique: true 添加到objectA 约束也无济于事。不是静默失败,而是抛出一个错误,表明唯一性检查由于未设置参数而失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多