gpt4 book ai didi

java - hibernate中的传递持久性顺序

转载 作者:行者123 更新时间:2023-11-30 04:56:31 24 4
gpt4 key购买 nike

我有 2 个父类 A、C 和 2 个子类:B、D。两种关系都启用了传递持久性。然而,持久化 D 需要持久化 B。

class A {
@OneToMany(cascade = {CascadeType.PERSIST}, mappedBy = "a")
public Set<B> getBs() {
...
}
}

class B {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id", nullable = false)
public A getA() {
...
}
}

class C {
@OneToMany(cascade = {CascadeType.PERSIST}, mappedBy = "c")
public Set<D> getDs() {
...
}
}

class D {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "b_id", nullable = false)
public B getB() {
...
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "c_id", nullable = false)
public C getC() {
...
}
}

我正在尝试一次性保存 B 和 D:

A a = entityManager.getReference(...);
C c = entityManager.getReference(...);

B b = new B();

D d = new D();
d.setB(b);

a.add(b);
b.setA(a);

c.add(d);
d.setC(c);

entityManager.flush();

我认为这应该是可能的。然而,我得到一个 TransientObjectException 告诉 B 在尝试保存 D 时需要持久化。

hibernate处理级联关系有特定的顺序吗?

最佳答案

当你刷新时,由于从C到D的级联,d被持久化。但是没有从D到B的级联,所以Hibernate会提示。 A 需要在 D 之前刷新才能工作,但没有理由在 A 和 D 之间有任何特定的顺序。

关于java - hibernate中的传递持久性顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363185/

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