Spring data and mongoDB - inheritance and @DBRef

前提是你 提交于 2020-02-24 11:34:37

问题


I have this two documents, User:

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

and Contact:

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

and then I have a document which referes either to User oder Contact:

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

    @DBRef
    private User user;
}

So I am able to add User oder Contact in DocumentFile#user but if I set a Contact to DocumentFile#user than I lost the reference because in MongoDB DocumentFile#user is stored as "_class" : "...Contact". Is there a solution for that?


回答1:


This is how your classes should look like to make the DBRef work with the inheritance.

User

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

}

Contact

Please note you don't need Document annotation on this class.

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

}

You'll just need the IDocumentFileRepository and IUserRepository for CRUD operations.

Rest of the code along with the test cases have been uploaded to github.

https://github.com/saagar2000/Spring



来源:https://stackoverflow.com/questions/41145881/spring-data-and-mongodb-inheritance-and-dbref

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!