[英]insert record with JPA having a field as an foreign key to another table
[英]Spring data jpa -Child entity having another foreign key representing same table field not inserted
我有两个实体。 User.java,DirectReport.java
User.java
*************************************
@Entity
@Table(name = "User")
@JsonInclude(Include.NON_NULL)
public class User{
.....
......
@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH,
CascadeType.REMOVE })
@JoinColumn(name = "user_code", referencedColumnName = "code")
public List<DirectReports> getDirectReports() {
return directReports;
}
public void setDirectReports(List<DirectReports> directReports) {
this.directReports = directReports;
}
}
DirectReport.java
****************************
@ManyToOne(optional=true)
@JoinColumn(name = "directreport_code", referencedColumnName = "code", insertable = false, updatable = false)
public User getDirectReport() {
return directReport;
}
public void setDirectReport(User directReport) {
this.directReport = directReport;
}
@Column(name="directreport_code")
public String getDirReportCode() {
return dirReportCode;
}
public void setDirReportCode(String dirReportCode) {
this.dirReportCode = dirReportCode;
}
数据已插入子表中。 user_code列也已更新。 但是directreports_code字段设置为null。 有人可以帮忙吗?
编辑:更新数据库,如下所示:
UserService.java
***********************************
User userVar;
DirectReports dr;
for (String str : model.getDirectReportsCode()) {
userVar = repository.findByCodeIgnoreCase(str);
System.out.println("userVar "+userVar.getCode());
dr = new DirectReports();
if (userVar != null) {
dr.setDirReportCode(userVar.getCode());
list.add(dr);
}
}
System.out.println("list " + list);
model.setDirectReports(list);
toBeApprovedModel2 = getMainRepository().save(model);
getMainRepository().flush();
postApprove(toBeApprovedModel2);
注意:model.getDirectReportsCode()是一个字符串。 我正在迭代,找到相应的用户,将其添加到列表中并在模型对象中进行设置。 我可以在“ getMainRepository()。save(model)”中看到dirReportCode字段的值。
在您的UserService.java
尝试在dr
对象上也设置userVar
if (userVar != null) {
dr.setDirReportCode(userVar.getCode());
dr.setDirectReport(userVar); // <----- do this
//rest of your code
更新资料
在您的User
实体中更改以下内容:
@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH,
CascadeType.REMOVE })
@JoinColumn(name = "user_code", referencedColumnName = "code")
public List<DirectReports> getDirectReports() {
return directReports;
}
为了(请注意添加的mappedBy
属性和消除@JoinColumn
):
@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH,
CascadeType.REMOVE }, mappedBy="directReport")
public List<DirectReports> getDirectReports() {
return directReports;
}
我没有在服务器端构造Directreport,而是在客户端本身构造了对象,并将其保存在我遇到任何问题的地方。 但是,我不知道为什么在服务器端构造对象不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.