我有以下实体
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);
我从hibernate获得以下异常:
object references an unsaved transient instance - save the transient instance before flushing
如果我在添加a
后保存b
,我的代码就有效,因为b
之前保存了c
。
我猜测持续存在级联的顺序非常重要。有什么方法可以确保b在c之前级联?
答案 0 :(得分:0)
我可能错了,但我认为不可能确保您的B列表首先级联,但这不是最好的做法。
我认为你最简单的选择是将级联持久性添加到从C到B的关系中。
class C {
@ManyToOne
A a;
@ManyToOne(cascade = PERSIST)
B b;
}