2017-09-27 15 views
0

私は1対多の関係、つまりAとBを持っています。Aは多くのBインスタンスを参照することがあります。 Bインスタンスも独立して管理できます。 、Bクラスは次のようになります理由です:SpringデータCouchbaseは@Id属性を埋め込み時にjsonに設定します

public class B { 
    @Id 
    private String id; 
    private String appId; 
} 

クラスはBのインスタンスのリストを参照します。だから、次のようになります。それは@Idで注釈されているので

bInstancesがBのインスタンスで満たされた後、インスタンスが保存されている
public class A { 
    @Id 
    private String id; 
    private int age; 
    private List<B> bInstances; 
} 

は、BのインスタンスのIDフィールドは、JSON文書から削除されます。 Bが別のクラスに埋め込まれている場合、このフィールドをJSONに追加するだけです。 Bインスタンスを単独で保存すると、@Idフィールドを通常のキーとして使用できます。 どうすればいいですか?

答えて

0

は特に、あなたの質問に答えるために、はい@Id注釈付きフィールドがシリアライズされたJSONに書き込まれません。ここにあなたの最善の策は、例えば、フィールドを複製し、コンストラクタやセッターのいずれかで、その値を設定することです:

public class B { 
@Id 
private String metaId; 
private String id; 
private String appId; 

public setMetaId(String metaId) { 
    this.metaId = metaId; 
    this.id = metaId; 
} 
} 

することはできそれらの@JsonIgnore 1あなたはシリアル化で重複を表示したくない場合は。

注:私はRobinの答えに完全に同意しますが、データをそのまま保存し、将来参照する場合があります。したがって、Bインスタンスデータを保存してから1週間後に変更されました。だからそれはあなたのシナリオに本当に依存します。

0

にはお勧めしません。は、BのインスタンスをAのドキュメントに直接格納します。 BのインスタンスがクラスAの複数のドキュメントに格納されている場合。

あるクラスのインスタンスを別のクラスに格納する望ましい方法は、代わりにドキュメントIDを保存することです。だからあなたのクラスAは、次のようになります。

public class A { 
    @Id 
    private String id; 
    private int age; 
    private List<String> bInstanceIds; 
} 
+0

それから何ですか? idによってサブドキュメントを取得するための定型文を自分で作成しますか?したがって、 '@ ManyToMany'のようなrelartionnalアノテーションは使用できません。 MongoDbの '@ DBRef' –

関連する問題