2016-12-14 2 views
1

je présente deux documents, l'utilisateur:données de printemps et MongoDB - héritage et @DBRef

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

et Contact:

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

puis-je avoir un document référés soit à l'utilisateur oder Contactez :

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

    @DBRef 
    private User user; 
} 

Je suis en mesure d'ajouter l'utilisateur oder contacter dans DocumentFile # utilisateur, mais si je mets un contact à documen tFile # utilisateur que j'ai perdu la référence car dans MongoDB DocumentFile # utilisateur est stocké sous la forme "_class": "... Contact". Y a-t-il une solution pour cela?

+0

Je résolus avec deux champs différents ** DocumentFile ** mais je serais toujours intéressé par la façon de le faire de la manière d'héritage avec le type de base ** Utilisateur ** – quma

+0

Que voulez-vous dire en perdant la référence? Avez-vous des problèmes pour récupérer les données? – Veeram

+0

Oui, car le type _class dans le document ** DocumentFile ** est ** ... Utilisateur ** (également s'il s'agit d'une référence de contact) mais il doit être ** ... Contact ** et donc lorsque je récupère un champ documentFile than user est null. – quma

Répondre

3

Voici à quoi devraient ressembler vos classes pour que DBRef fonctionne avec l'héritage.

utilisateur

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

} 

Contactez

S'il vous plaît noter que vous n'avez pas besoin d'annotation de document sur cette classe.

public class Contact extends User { 

    private String address; 

    public String getAddress() { 
     return address; 
    } 

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

Document File

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

} 

Vous aurez juste besoin de la IDocumentFileRepository et IUserRepository pour les opérations CRUD.

Le reste du code ainsi que les cas de test ont été téléchargés sur github.

https://github.com/saagar2000/Spring