Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring data mongodb中实体继承是如何实现的_Mongodb_Spring Data Mongodb - Fatal编程技术网

Spring data mongodb中实体继承是如何实现的

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

我有两个人,雇员和雇员。我想在SpringDataMongoDB中实现实体继承。与SpringDataJPA一样,SpringDataMongoDB中@Inheritation和@PrimaryKeyJoinColumn的等效注释是什么。现在,我已经实现了如下内容:

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
  }
}