如何在GORM中建立可选的一对一关系?

cde*_*zaq 5 grails one-to-one grails-orm grails-domain-class

我有2个对象,ObjectAObjectB.

ObjectA被创建,ObjectB则无法(不能,由于没有数据还)还不存在.

一旦ObjectB创建,如果存在适当的一个,它需要ObjectA附加一个对应的.如果没有合适的,那么新的简单地没有连接到一个.ObjectAObjectB

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

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

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

ObjectB
- Id (NotNull, unique)
Run Code Online (Sandbox Code Playgroud)

如何组合GORM域类来完成此操作?

我已经试过几乎所有的组合hasOne,belongsTo,原始属性,nullable: trueunique: true限制我能想到的,但我必须缺少一个.这似乎不是一个特别奇怪的场景,所以必须有一些方法来实现这一点.

cde*_*zaq 5

通常情况下,将我的想法放在一起提出问题就会引出我的解决方案:

Class ObjectA {
    ObjectB objectB

    static constraints = {
        objectB nullable: true, unique: true
    }
}

Class ObjectB {
    static belongsTo = [objectA: ObjectA]

    static constraints = {
        objectA nullable: true
    }
}
Run Code Online (Sandbox Code Playgroud)

与此唯一的问题,我似乎无法避开的是,它可以设置ObjectB.objectAObjectA已与一个关联ObjectB.保存新关联时,GORM不会保存关联.不会抛出任何错误,并且ObjectB从数据库中提取新内容会使其objectA属性未设置.

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