2016-12-07 56 views
0

我不知道如何保存與SDR的記錄與現有表的鏈接。 例如:春天的數據休息與關係(外鍵)保存記錄在Java(repo.save())

有一個查找表標誌和另一個表帳戶與名稱和n:1相對於的Flag-ID中的ID標記 -table已經創建。

@Entity 
public class Account{ 
    public Account(String name, Flag flag){ 
     this.name = name; 
     this.flag = flag; 
    } 

    @Id 
    private int id; 

    @Column 
    private String name; 

    @ManyToOne 
    private Flag flag; 
    // Getter & Setter 
} 

@Entity 
public class Flag{ 
    public Flag(String title){ 
     this.title = title; 
    } 

    @Id 
    private int id; 

    @Column 
    private String title; 
    // Getter & Setter 
} 

現在我想添加一個帳戶,並將其鏈接到這樣的標誌ID:

AccountRepo accountRepo; 
accountRepo.save(new Account("Name", 0)); 

但我宣佈我的帳戶功能的對象,如果我想執行保存功能全,我要補充一個標誌對象是這樣的:

accountRepo.save(new Account("Name", new Flag("title"))); 

然而,在這種情況下,該框架將添加一個新的標誌記錄,我不想要的東西。我只想鏈接它。

所以我需要幫助解決我的問題。

謝謝!

編輯︰ @ piotr-sołtysiak和@ upesh-m的兩個答案幫助和爲我工作。謝謝你的幫助!

回答

1

您可以使用休眠的 '合併'即, entityManager.merge(新帳戶(「名稱」,新標誌(「標題」)))。但是國旗的Id應該是一個現有的ID,這樣它就可以爲Account添加一個條目。

即。如果你已經在ID爲1的db中存在標誌記錄,並且你想添加一個鏈接到這個標誌的賬戶,那麼使用entityManager.merge(新賬戶(「Name」,existingFlagObject)

+0

它也可以,謝謝! – Phil

1
  1. 查找所需標誌的實體使用專用倉庫,如

    Flag flag = flagRespository.findByTitle("title"); 
    
  2. 它的帳戶實體設置和保存:

    accountRepo.save(new Account("Name", flag)); 
    
+0

是的, ! – Phil