Spring Data JPA一对多关系无法保存子表

3

父实体

@OneToMany(fetch = FetchType.EAGER, mappedBy = "paramRef", cascade=CascadeType.ALL)
public Set getParamList() { return this.paramList; }

子实体

@ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "param_Ref_Id", nullable = false, insertable=false, updatable=false)
public ParamRef1 getParamRef() { return this.paramRef; }

持久化代码

ParamRef1 pr = new ParamRef1();
pr.setName("TEST PARAM");

Param1 p1 = new Param1() p1.setParamValue("ONE") p1.setParamRef(pr);
Param1 p2 = new Param1() p2.setParamValue("TWO") p2.setParamRef(pr);

Set paramList = new HashSet() paramList.add(p1) paramList.add(p2)

pr.setParamList(paramList)

pr = paramRefDao1.save(pr)

请告诉我步骤是否正确。我遇到了以下异常,无法理解为什么子表中没有父ID。
由于:org.hibernate.exception.ConstraintViolationException:在列'PARAM_REF_ID'中插入空值失败,该列不允许为空。 INSERT失败,表'PARAM'。
1个回答

1
您在父表中缺少列PARAM_REF_ID的值。
ParamRef1 pr = new ParamRef1();
pr.setName("TEST PARAM");
pr.setParamRefId(1); // replace 1 with any other valid id as value

嗨,感谢您的回复。实际上,我正在使用身份验证来管理我的 MS SQL Server 中的父表和子表。因此,我的父表在存储主键字段值方面没有任何问题。但是,在持久化子表时,父键 ID 不可用。您有什么猜测我的代码中缺少或错误了什么吗? - user3560205

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接