私は2つのエンティティを持っています。 User.java、DirectReport.javaスプリングデータjpa - 同じテーブルフィールドを表す別の外部キーを持つファイルエンティティ
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フィールドの値を見ることができます。以下を変更するあなたのUser
エンティティで
更新あなたdr
オブジェクト
if (userVar != null) {
dr.setDirReportCode(userVar.getCode());
dr.setDirectReport(userVar); // <----- do this
//rest of your code
にもuserVar
を設定してみてください、あなたのUserService.java
で
データベースを更新してコードを共有する方法は? – Balasubramanian
クラスのコード全体を投稿できますか? 'DirectReport'は少し奇妙に見えます。 – pleft
保存中に子レコードを最初に保存し、親に同じレコードを設定します。 –