我有以下实体
class A {
@OneToMany(cascade = ALL)
List<B> b;
@OneToMany(cascade = ALL)
List<C> c;
}
class B {
@ManyToOne
A a
}
class C {
@ManyToOne
A a;
@ManyToOne
B b;
}
现在,当我在事务中执行以下代码时
A a = repository.findOne(id);
B b = new B();
C c = new C();
c.setB(b);
a.addB(b);
a.addC(c);
repository.save(a);
我从休眠中得到以下异常:
object references an unsaved transient instance - save the transient instance before flushing
如果我在添加b
后保存a
,我的代码就可以工作,因为这样b
在c
之前保存。
我猜持久性级联的顺序很重要。有什么方法可以确保 b 在 c 之前级联?
我可能是错的,但我认为不可能确保您的 B 列表首先级联,无论如何这不是最佳实践。
我认为您最简单的选择是将级联持久添加到从 C 到 B 的关系中。
class C {
@ManyToOne
A a;
@ManyToOne(cascade = PERSIST)
B b;
}