Spring Data JPA保存多级关联实体时子子实体E、F未持久化问题
问题解决方案
核心原因1:EntityD关联E、F的级联配置缺失PERSIST规则
你当前EntityD中对EntityE、EntityF的关联仅配置了CASCADE.MERGE,该级联策略仅在更新实体时生效,首次调用save执行持久化操作时,需要CASCADE.PERSIST规则才能触发子实体的自动保存。
核心原因2:实体构建代码存在多处语法/逻辑错误
你提供的EntityA构建代码有多处笔误导致关联关系未正确绑定:
- EntityD的变量名是小写
d,代码中错误使用大写D调用方法 - 构建EntityF集合时错误调用了
D.getEntityE()获取集合,导致F对象未加入EntityD的F集合中 - 变量名大小写不一致:定义的集合变量是
ESet,添加元素时用了小写eset - 属性名拼写错误:
setCloumn1应为setColumn1
解决步骤
- 修改EntityD的关联级联配置,将E、F的
@OneToMany注解级联策略修改为包含PERSIST,或者直接使用ALL:
// 修改前 @OneToMany(cascade = CASCADE.MERGE, mappedBy="entityD") private set<EntityE> = new Hashset()<>; @OneToMany(cascade = CASCADE.MERGE, mappedBy="entityD") private set<EntityF> = new Hashset()<>; // 修改后 @OneToMany(cascade = CascadeType.ALL, mappedBy="entityD") private Set<EntityE> entityESet = new HashSet<>(); @OneToMany(cascade = CascadeType.ALL, mappedBy="entityD") private Set<EntityF> entityFSet = new HashSet<>();
- 修正EntityA构建代码的错误:
//build D Set<EntityD> dSet = a.getEntityDSet(); EntityD d = new EntityD(); d.setColumn1("dtest"); //build EntityE Set<EntityE> eSet = d.getEntityESet(); EntityE e = new EntityE(); e.setColumn1("eTest"); eSet.add(e); //for each E set D for(EntityE es:eSet) { es.setEntityD(d); } //build EntityF Set<EntityF> fSet = d.getEntityFSet(); EntityF f = new EntityF(); f.setColumn1("fTest"); fSet.add(f); //for each F set D for(EntityF fs:fSet) { fs.setEntityD(d); } //add D dSet.add(d); //for each D set A for(EntityD ds:dSet) { ds.setEntityA(a); }
- 额外修正EntityA中的配置错误:你当前EntityA中三个
@OneToMany注解的泛型、mappedBy属性均配置错误,需修正为对应实体类型和正确的关联属性名:
@OneToMany(cascade = CascadeType.ALL, mappedBy="entityA") private Set<EntityB> entityBSet = new HashSet<>(); @OneToMany(cascade = CascadeType.ALL, mappedBy="entityA") private Set<EntityC> entityCSet = new HashSet<>(); @OneToMany(cascade = CascadeType.ALL, mappedBy="entityA") private Set<EntityD> entityDSet = new HashSet<>();
- 基础语法修正:所有JPA注解、Java关键字的大小写要符合规范,比如
@Column、@JoinColumn首字母大写,public、class关键字小写,Serializable接口首字母大写,避免编译或运行异常。
内容的提问来源于stack exchange,提问作者user17183347
相关产品推荐
相关产品推荐

