级联插入JPA中的对子关系



我有4个实体与OneToMany关联映射。所以实体A (OneToMany ) -> B (OneToMany ) -> C (OneToMany )-> D

我想立刻保存整个结构。因此,我为每个OneToMany设置了cascade = CascadeType.ALL。但JPA似乎不想保存C和D关联,我所完成的只是B引用了A,而C和D是在没有引用的情况下保存的。

当我用c.setB(b(和d.setC(c(这样的引用保存它时,它会给我错误object references an unsaved transient instance - save the transient instance before flushing

那么,是否可以用引用保存所有4个实体,或者我应该用代码一步一步地保存它?

A:

@OneToMany(mappedBy = "a", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<B> b;

B:

@OneToMany(mappedBy = "b", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<C> c;
@JoinColumn(name = "aId")
@ManyToOne(fetch = FetchType.LAZY)
private A a;

C:

@OneToMany(mappedBy = "c", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<D> d;
@JoinColumn(name = "bId")
@ManyToOne(fetch = FetchType.LAZY)
private B b;

D:

@JoinColumn(name = "cId")
@ManyToOne(fetch = FetchType.LAZY)
private C c;

这是我的错误,我在C实体中添加了不存在的引用。所以这是可能的(Hibernate完成了所有4级级联!

最新更新