Spring data mongodb中实体继承是如何实现的
我有两个人,雇员和雇员。我想在SpringDataMongoDB中实现实体继承。与SpringDataJPA一样,SpringDataMongoDB中@Inheritation和@PrimaryKeyJoinColumn的等效注释是什么。现在,我已经实现了如下内容:Spring data mongodb中实体继承是如何实现的,mongodb,spring-data-mongodb,Mongodb,Spring Data Mongodb,我有两个人,雇员和雇员。我想在SpringDataMongoDB中实现实体继承。与SpringDataJPA一样,SpringDataMongoDB中@Inheritation和@PrimaryKeyJoinColumn的等效注释是什么。现在,我已经实现了如下内容: interface Person { String getId(); void setId(String id); String getName(); void getName(String nam
interface Person {
String getId();
void setId(String id);
String getName();
void getName(String name);
}
@Document(collection = "person")
class PersonImpl implements Person {
@Id
String id;
// Getters and setters
// Constructors, equals, hashcode and toString methods
}
interface Employee extends Person {
int getNumberOfDependents();
void getNumberOfDependents(int numberOfDependents);
}
@Document(collection = "employee")
class EmployeeImpl extends PersonImpl implements Employee {
// Getters and setters
// Constructors, equals, hashcode and toString methods
}
interface Employee1 extends Person {
int getNumberOfDependents();
void getNumberOfDependents(int numberOfDependents);
}
@Document(collection = "employee1")
class Employee1Impl extends PersonImpl implements Employee1 {
// Getters and setters
// Constructors, equals, hashcode and toString methods
}
Repository structure:
public interface PersonRepository extends MongoRepository<Person, String> {
}
public interface EmployeeRepository extends MongoRepository<Employee, String> {
}
public interface Employee1Repository extends MongoRepository<Employee1, String> {
}
接口人{
字符串getId();
void setId(字符串id);
字符串getName();
void getName(字符串名称);
}
@文件(collection=“person”)
类PersonImpl实现Person{
@身份证
字符串id;
//接球手和接球手
//构造函数、equals、hashcode和toString方法
}
接口雇员扩展个人{
int getNumberOfDependents();
void getNumberOfDependents(int numberOfDependents);
}
@文档(collection=“employee”)
类EmployeeImpl扩展PersonImpl实现Employee{
//接球手和接球手
//构造函数、equals、hashcode和toString方法
}
接口Employee1扩展个人{
int getNumberOfDependents();
void getNumberOfDependents(int numberOfDependents);
}
@文件(collection=“employee1”)
类Employee1Impl扩展PersonImpl实现Employee1{
//接球手和接球手
//构造函数、equals、hashcode和toString方法
}
存储库结构:
公共接口PersonRepository扩展了MongoRepository{
}
公共接口EmployeeRepository扩展了MongoRepository{
}
公共接口Employee1Repository扩展了MongoRepository{
}
我首先保存Person对象,然后获取它的ID,创建一个具有相同ID的Employee对象并保存它。这会创建新对象,因此我会丢失所有Person对象的内容。
我还觉得我必须实现NoRepositoryBean。
我很困惑。请提供帮助。这里有一种方法:
@Document(collection = "person")
class Person {
@Id
String id;
// Getters and setters
// Constructors, equals, hashcode and toString methods
}
请注意,收款字段指的是“个人”,而不是“员工”
在这种方法中,您不需要为每个派生类创建存储库
@Repository
public interface PersonRepository extends MongoRepository<Person, String> {}
@存储库
公共接口PersonRepository扩展了MongoRepository{}
代码示例:
@Autowired
private PersonRepository personRepo;
public void test() {
Employee employee = new Employee("1", "teacher")
personRepo.save(employee)
Optional<Person> optionalPerson = personRepo.findById("1");
Employee employeeFromDb;
if (optionalPerson.isPresent()) {
employeeFromDb = (Employee)optionalPerson.get()
}
else {
// could not find in db
}
}
@Autowired
私人personRepo;
公开无效测试(){
员工=新员工(“1”、“教师”)
personRepo.save(员工)
可选optionalPerson=personRepo.findById(“1”);
雇员-雇员关系数据库;
if(可选person.isPresent()){
employeeFromDb=(Employee)optionalPerson.get()
}
否则{
//在数据库中找不到
}
}
看看这是否有帮助@韦拉姆:1)。不将扩展类作为文档的原因是什么?在我的例子中,我必须查询扩展类中的几个字段。所以我想把它做成一份文件。2). 创建Employee对象并保存后,如何使用相同的用户对象创建Employee1对象?因为,在SpringDataJPA中,我们将在子类中拥有id,我们将为其附加已经创建的基本对象id并保存。子类中没有ID。如果我要查找所有员工,该怎么办?
@Autowired
private PersonRepository personRepo;
public void test() {
Employee employee = new Employee("1", "teacher")
personRepo.save(employee)
Optional<Person> optionalPerson = personRepo.findById("1");
Employee employeeFromDb;
if (optionalPerson.isPresent()) {
employeeFromDb = (Employee)optionalPerson.get()
}
else {
// could not find in db
}
}