Java jpa(hibernate)一对多刷新不是刷新多方集合
我有一个复杂的数据模型。A类有B、C、D类型的集合。E是D和C之间的联接表。F是D和B之间的联接表 我正在从D(cascade.All)保存E和F。因为E包含对C的引用,F包含对B的引用,所以我需要在继续保存D之前将它们都保存(id已生成) 这就是我的储蓄顺序Java jpa(hibernate)一对多刷新不是刷新多方集合,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有一个复杂的数据模型。A类有B、C、D类型的集合。E是D和C之间的联接表。F是D和B之间的联接表 我正在从D(cascade.All)保存E和F。因为E包含对C的引用,F包含对B的引用,所以我需要在继续保存D之前将它们都保存(id已生成) 这就是我的储蓄顺序 saveAndFlush(A)(我希望语句刷新A(B和C),因为它们应该从A级联而来) 保存(D)当我运行它时,我得到以下异常 原因:java.lang.IllegalStateException:org.hibernate.Transi
class A{
@OneToMany(mappedBy = "a", cascade={CascadeType.ALL}, orphanRemoval=true)
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<B> bSet = new HashSet<>();
@OneToMany(mappedBy = "a", cascade={CascadeType.ALL}, orphanRemoval=true)
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<C> cSet = new HashSet<>();
@OneToMany(mappedBy = "a", cascade={CascadeType.REMOVE , CascadeType.DETACH}, orphanRemoval=true)
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private List<D> dSet = new ArrayList<>();
}
class B{
@ManyToOne
private A a;
}
class C{
@ManyToOne
private A a;
}
class D{
@OneToMany(mappedBy = "d", cascade = CascadeType.ALL)
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<E> e = new HashSet<>()
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "d")
private F f;
@ManyToOne
private A a;
}
/*E is join table between D and C*/
class E{
@ManyToOne
private D d;
@ManyToOne
private C c;
}
/*F is join table between D and B*/
class F{
@OneToOne
@JoinColumn(name="d_id")
private D d;
@ManyToOne
private B b;
}
A类{
@OneToMany(mappedBy=“a”,cascade={CascadeType.ALL},orphanRemoving=true)
@杰索尼奥雷
@缓存(用法=缓存并发策略。非严格读写)
私有集bSet=newhashset();
@OneToMany(mappedBy=“a”,cascade={CascadeType.ALL},orphanRemoving=true)
@杰索尼奥雷
@缓存(用法=缓存并发策略。非严格读写)
私有集cSet=newhashset();
@OneToMany(mappedBy=“a”,cascade={CascadeType.REMOVE,CascadeType.DETACH},orphanremove=true)
@杰索尼奥雷
@缓存(用法=缓存并发策略。非严格读写)
private List dSet=new ArrayList();
}
B类{
@许多酮
私人A;
}
C类{
@许多酮
私人A;
}
D类{
@OneToMany(mappedBy=“d”,cascade=CascadeType.ALL)
@杰索尼奥雷
@缓存(用法=缓存并发策略。非严格读写)
私有集e=新哈希集()
@OneTONE(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“d”)
私人基金;
@许多酮
私人A;
}
/*E是D和C之间的联接表*/
E类{
@许多酮
私家侦探;
@许多酮
私人C C;
}
/*F是D和B之间的联接表*/
F类{
@奥内托内
@JoinColumn(name=“d_id”)
私家侦探;
@许多酮
私人B,;
}
该错误表明您创建的关联尚未在数据库中持久化。还要检查关系中的mappedBy属性,它显示关系所有者的名称,并且应该出现在反向引用中,即反向引用中。还应将级联属性放在关系所有者的末尾。确保在所有情况下都设置了关系的双方。a、 添加(d);d、 刚毛(a);阿兰海伊:我正在建立双方的关系。但是仍然看到了这个问题。@VivekSingh cascade已经就位。但是,主关系侧不应出现“不工作映射人”,而“映射人”用于显示反向侧的关系。