2016-12-14 105 views
1

我有这样两个文件,用户:春数据和MongoDB - 继承和@DBRef

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

及联系方式:

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

,然后我有referes要么用户奥德联系的文件:

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

    @DBRef 
    private User user; 
} 

所以我能够添加UserOder联系人在DocumentFile#用户,但如果我设置联系人到文档员tFile#用户比我失去了参考,因为在MongoDB中DocumentFile#用户存储为“_class”:“... Contact”。 有没有解决方案?

+0

我在两个不同领域的解决它** ** DocumentFile但我仍然有兴趣在如何做到这一点的继承与基本型的方式** **用户 – quma

+0

你是什么意思通过失去参考?你有问题获取数据吗? – Veeram

+0

是的,因为** DocumentFile **文档中的_class类型是** ...用户**(如果它是联系人引用的话),但它应该是** ...联系**,因此当我检索一个documentFile比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