2016-12-07 4 views
0

既存のテーブルへのリンクを持つレコードをSDRに保存する方法はわかりません。たとえば :SpringデータJava(repo.save())でリレーション(外部​​キー)を使用してレコードを保存する

ルックアップテーブルがあり、別のテーブルアカウント名前であり、n:旗-IDから1人の関係。 のIDはフラグがすでに作成されています。

@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)); 

しかし、私は自分のアカウント機能でオブジェクトを宣言し、私が実行したい場合は、保存します-function、私はこのようなフラグ・オブジェクトを追加する必要があります。

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

しかし、この場合には、フレームワークは、私が望んでいないものを、新しいフラッグ・レコードを追加します。私はそれをリンクしたいだけです。

私は私の問題を解決するための助けが必要です。

ありがとうございます!

編集: @ piotr-sołtysiakと@ upesh-mの2つの回答が助けられ、私のために働いた。ご協力いただきありがとうございます!

答えて

1

すなわち、 entityManager.merge(新しいアカウント( "名前"、新しいフラグ( "タイトル")))。しかし、FlagのIdは既存のIDである必要があり、Accountにエントリを追加するだけです。

ie。既にid = 1のdbにフラグレコードがあり、このフラグにリンクされているアカウントを追加したい場合は、entityManager.merge(new Account( "Name"、existingFlagObject))を使用してください。

+0

あまりにも、ありがとう! – Phil

1
  1. 設定、それをアカウントエンティティ内や保存など

    Flag flag = flagRespository.findByTitle("title"); 
    
  2. 、専用のリポジトリを使用して、所望のフラグエンティティを探す:

    あなたが休止状態の 'マージ' を使用することができます
    accountRepo.save(new Account("Name", flag)); 
    
+0

はい、ありがとう! – Phil

関連する問題