Spring 数据和 mongoDB - 继承和@DBRef
Spring data and mongoDB - inheritance and @DBRef
我有这两个文件,用户:
@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”: “...接触”。
有解决办法吗?
这就是您的 classes 使 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;
}
}
联系方式
请注意,您不需要在此 class 上添加文档注释。
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。
我有这两个文件,用户:
@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”: “...接触”。 有解决办法吗?
这就是您的 classes 使 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;
}
}
联系方式
请注意,您不需要在此 class 上添加文档注释。
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。