多个字段的 Hibernate 级联顺序 - 对象引用未保存的瞬态实例

Hibernate cascading order for multiple fields - object references an unsaved transient instance

我有以下实体

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,我的代码就可以工作,因为 bc 之前保存。

我猜持久层级联的顺序很重要。有什么方法可以确保 b 在 c 之前级联吗?

我可能错了,但我认为不可能确保首先级联你的 B 列表,无论如何这都不是最佳做法。

我认为最简单的选择是将级联持久化添加到从 C 到 B 的关系中。

class C {
    @ManyToOne
    A a;
    @ManyToOne(cascade = PERSIST)
    B b;
}