gpt4 book ai didi

hibernate - GORM 级联保存的顺序取决于字段名称?真的吗?

转载 作者:行者123 更新时间:2023-12-04 01:15:05 25 4
gpt4 key购买 nike

我有以下类(class)安排:

class A {
static belongsTo = [c: C]
B b
}

class B {
static belongsTo = [c: C]
}


class C {
static hasMany = [bbs: B, aas: A]
}

如果我现在创建这些类的实例...
B b = new B()
A a = new A()
a.b = b

C c = new C()
c.addToBbs(b)
c.addToAas(a)

...并尝试保存...
c.save()

... 我得到一个 org.hibernate.TransientObjectException Message object references an unsaved transient instance - save the transient instance before flushing: B .

我认为 GORM 所做的是首先将保存级联到 c.aas然后它偶然发现了实例 a.b尚未保存。因此异常(exception)。

现在 诀窍 : 如果我重命名 aas C 的属性(property)至 xxs , 有用:
class C {
static hasMany = [bbs: B, xxs: A]
}
b先保存,然后 a . GORM 似乎按照字段的字典顺序级联保存(首先是 bbs ,然后是 xxs )!

我如何控制 GORM 用于保存级联的序列 (除了重命名字段,这对我来说似乎很脆弱)?

最佳答案

据我所知,GORM 没有提供一种方法来控制将保存级联应用于属性的顺序。

我认为您应该能够通过使用以下方法之一来解决这个问题:

1] 显式保存 B保存前的实例 A 's (就像一个总是为没有 belongsTo 的单个关联所做的那样)

B b = new B().save()  
A a = new A(b: b) // b should already be persisted as A doesn't `belongsTo` B
C c = new C()
c.addToBbs(b)
c.addToAas(a)
c.save()

2]定义 custom cascading behavior属性(property) b在类 A
class A {
static belongsTo = [c: C]
B b

static mapping = {
b cascade: 'save'
}
}

注意:这两种方法都没有经过测试

关于hibernate - GORM 级联保存的顺序取决于字段名称?真的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28725096/

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