2016-12-14 7 views
1

私はこの二つの文書、ユーザ持っ春データとMongoDBの継承と@DBRef

@Document(collection = "Contact") 
public class Contact extends User{ 
    // fields 
} 

をして、私はどちらかユーザー・オーデルお問い合わせにreferes文書を持っています:

@Document(collection = "DocumentFile") 
public class DocumentFile { 

    @DBRef 
    private User user; 
} 

だから私はDocumentFile番号のユーザーにユーザーオーデルお問い合わせを追加することですが、私はDocumenに連絡先を設定した場合、 tFile#userはMongoDB DocumentFile#ユーザが "_class"として保存されているため、参照を失ったよりも# "連絡先"です。 解決策はありますか?

+0

は私が** DocumentFile ** 2つの異なるフィールドでそれを解決したが、私はまだ基​​本的なタイプと継承の方法でそれを行う方法に興味がある**ユーザー** – quma

+0

あなたは何を意味しています参照を失うことによって?データを取り戻すのに問題はありますか? – Veeram

+0

はい、** DocumentFile **ドキュメントの_classタイプが** ...ユーザー**(連絡先参照の場合も)ですが**連絡先**である必要があります。 documentFile in userフィールドはnullです。 – quma

答えて

3

これは、DBRefが継承で機能するようにするためのクラスです。

ユーザー

@Document(collection = "User") 
public class User { 

    @Id 
    private String id; 
    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

問い合わせ

あなたはこのクラスのドキュメントの注釈を必要としませんのでご注意ください。

public class Contact extends User { 

    private String address; 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 
} 

ドキュメントファイルは

@Document(collection = "DocumentFile") 
public class DocumentFile { 

    @Id 
    private String id; 

    public void setId(String id) { 
     this.id = id; 
    } 

    @DBRef 
    private User user; 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

} 

あなたはCRUD操作のためのIDocumentFileRepositoryIUserRepositoryだけが必要になります。

残りのコードはテストケースとともにgithubにアップロードされています。

https://github.com/saagar2000/Spring