【问题标题】:Spring data and mongoDB - inheritance and @DBRefSpring数据和mongoDB - 继承和@DBRef
【发布时间】:2017-04-29 23:26:41
【问题描述】:

我有这两个文件,用户:

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

和联系方式:

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

然后我有一个文件可以参考用户或联系人:

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

    @DBRef
    private User user;
}

所以我可以在 DocumentFile#user 中添加用户或联系人,但是如果我将联系人设置为 DocumentFile#user,那么我会丢失引用,因为在 MongoDB DocumentFile#user 中存储为“_class”:“...Contact” . 有解决办法吗?

【问题讨论】:

  • 我用 DocumentFile 中的两个不同字段解决了它,但我仍然对如何以基本类型 User的继承方式来解决它感兴趣>
  • 失去参考是什么意思?恢复数据有问题吗?
  • 是的,因为 DocumentFile 文档中的 _class 类型是 ...User (如果它是 Contact-reference 也是如此)但它应该是...Contact,因此当我检索一个 documentFile 时,用户字段为空。

标签: mongodb spring-data dbref


【解决方案1】:

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

}

您只需要 IDocumentFileRepositoryIUserRepository 即可进行 CRUD 操作。

其余代码连同测试用例已上传至 github。

https://github.com/saagar2000/Spring

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多