问题
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