我有这两份文件,用户:
@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” 。 有解决办法吗?
最佳答案
这就是您的类应该如何使 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;
}
}
您只需要 IDocumentFileRepository
和 IUserRepository
来进行 CRUD 操作。
其余代码以及测试用例已上传到 github。
关于mongodb - Spring data 和 mongoDB - 继承和@DBRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41145881/