2017-09-13 1 views
0

私は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

+0

データベースを更新してコードを共有する方法は? – Balasubramanian

+0

クラスのコード全体を投稿できますか? 'DirectReport'は少し奇妙に見えます。 – pleft

+0

保存中に子レコードを最初に保存し、親に同じレコードを設定します。 –

答えて

0

:(へ

@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 attribのうちUTEと@JoinColumnの除去):代わりにサーバー側でdirectreportを構築する

@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.DETACH, 
      CascadeType.REMOVE }, mappedBy="directReport") 
public List<DirectReports> getDirectReports() { 
    return directReports; 
} 
+0

助けてくれてありがとう。今すぐ試してみてください。そして今でも、directreport_codeフィールドはヌルとして設定されています – RamaLakshmi

+0

私は自分の答えを更新してくれました。あなたは '@ OneToMany'と' @ ManyToOne'のやり方をよく見直すべきです。ここで簡単な例を見てください:https:// www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/ – pleft

+0

あなたのための1つの質問:なぜあなたの 'DirectReport'クラスに' directReport'として定義された 'User'オブジェクトがあるのですか?あなたの 'public User getDirectReport()'メソッド)これはあなた(そして私たち)に非常に混乱を引き起こしています! – pleft

0

、私はオブジェクトそれクライアント側自体を構築し、保存された私はどんな問題に直面DINTします。しかし、なぜサーバー側でオブジェクトを構築するのがうまくいかないのですか?

関連する問題