首页 > 解决方案 > 级联在JPA中插入一对子子关系

问题描述

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

我想一次保存整个结构。所以我已经cascade = CascadeType.ALL为每个OneToMany. 但似乎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;

乙:

@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;

丁:

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

标签: javahibernatejpa

解决方案


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


推荐阅读