gpt4 book ai didi

grails - 禁止Grails自动设置关系中的值

转载 作者:行者123 更新时间:2023-12-02 15:23:35 25 4
gpt4 key购买 nike

在这种情况下,我有两个相对位如下的域

    Subcription {
BillingPeriod billingPeriod

static constraints = {
billingPeriod nullable: true
}
}

BillingPeriod {
Subcription subcription

static constraints = {
subscription nullable: true
}
}

域中还有其他字段,但我已将其省略,因为此问题不需要它们。

我正在做的是获取订阅,并使用该订阅创建一个新的BillingPeriod。这是代码
    Subscription subscription = Subscription.get(id)
BillingPeriod billingPeriod = new BillingPeriod(subscription: subscription)
billingPeriod.save()

现在的问题是,在第1行检索到订阅时,其billingPeriod为空。但是,在执行第2行或使用该订阅创建新的BillingPeriod实例之后,订阅的billingPeriod从null更改为新创建的billingPeriod!

如何停止/禁用这两种关系的自动构建?

我正在使用Grails 2.4.4

最佳答案

GORM的工作方式与设计完全相同。

在您的情况下,SubcriptionBillingPeriod之间有一个联接表,该表为您的域类的2个实例保存1条记录。这意味着,如果您创建一个类的实例并填充对另一类的实例的引用,则将创建连接记录,并且该记录对第二个类也可见。

这就是您所看到的并且是所需的行为。

如果您不想那样做,则必须解耦您的类(class)。一种可能的方法是使用hasOne和只读formula:

Subcription {
BillingPeriod getBillingPeriod(){
BillingPeriod.findBySubscription this
}
}

BillingPeriod {
static hasOne = [ subcription:Subcription ]
}
hasOne不创建联接表,它使用FK列。

关于grails - 禁止Grails自动设置关系中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com