Use*_*321 6 mongodb spring-data-mongodb
我有两个实体 Person、Employee 和 Employee1。我想在 Spring Data MongoDB 中实现实体继承。与 Spring Data JPA 中一样,Spring Data MongoDB 中 @Inheritance 和 @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> {
}
Run Code Online (Sandbox Code Playgroud)
我首先保存 Person 对象,然后获取它的 ID,创建具有相同 ID 的 Employee 对象并保存它。这会创建新对象,因此我会丢失所有 Person 对象的内容。我还觉得我还必须实现 NoRepositoryBean。我很困惑。请帮忙。
这是一种方法:
@Document(collection = "person")
class Person {
@Id
String id;
// Getters and setters
// Constructors, equals, hashcode and toString methods
}
Run Code Online (Sandbox Code Playgroud)
请注意,集合字段指的是“人员”而不是“员工”
@Document(collection = "person")
class Employee extends Person {
String jobTitle;
// Getters and setters
// Constructors, equals, hashcode and toString methods
}
Run Code Online (Sandbox Code Playgroud)
在此方法中,您不需要为每个派生类创建存储库
@Repository
public interface PersonRepository extends MongoRepository<Person, String> {}
Run Code Online (Sandbox Code Playgroud)
代码示例:
@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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9815 次 |
| 最近记录: |