Spring数据和MongoDB-继承和@DBRef

qum*_*uma 2 mongodb dbref spring-data

我有这两个文件,用户:

@Document(collection = "User")
public class User {
    // fields
}
Run Code Online (Sandbox Code Playgroud)

和联系方式:

@Document(collection = "Contact")
public class Contact extends User{
    // fields
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个文档,它引用了“用户oder联系人”:

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

    @DBRef
    private User user;
}
Run Code Online (Sandbox Code Playgroud)

因此,我能够在DocumentFile#user中添加用户或联系人,但是如果我将Contact设置为DocumentFile#user,则丢失了引用,因为在MongoDB中,DocumentFile#user存储为“ _class”:“ ... Contact”。有解决方案吗?

use*_*814 5

这就是类使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;
    }

}
Run Code Online (Sandbox Code Playgroud)

联系

请注意,您在此类上不需要文档注释。

public class Contact extends User {

    private String address;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
Run Code Online (Sandbox Code Playgroud)

文件档案

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

}
Run Code Online (Sandbox Code Playgroud)

您只需要IDocumentFileRepositoryIUserRepository用于CRUD操作。

其余代码以及测试用例已上传到github。

https://github.com/saagar2000/Spring