Mar*_*man 1 spring hibernate spring-data-jpa spring-boot
我有两个班级,部门和员工。它们是一对多的关系,即一个部门可以有很多员工。
没有部门,员工就不能存在。
部门可以有 0 到 n 个员工。
我得到了这两个项目的列表...这些列表可以包含新条目和更新的条目。
我的问题是,我该怎么做?
或者
Set<>
员工?或者
有没有另一种方法可以做到这一点,我还没有想过?
有两种模式称为“Repository”和“Aggregate”,它们来自 Eric Evans Domain Driven Design一书,使用其中一种是最佳实践。
@OneToMany
实体之间没有 JPA 关系 ( )employee
只包含它的departmentId
字段departmentRepo
, employeeRepo
)如果你必须得到员工的部门,它应该是这样的:
department = departmentRepo.findById(employee.departmentId)
Run Code Online (Sandbox Code Playgroud)
保存实体也独立使用它们的存储库完成:
newDepartment = departmentRepo.save(new Department())
newEmployee = employeeRepo.save(new Employee(newDepartment.id))
Run Code Online (Sandbox Code Playgroud)
与两个存储库不同,实体之间没有连接,聚合模式使用:
departmentRepo
在这种情况下)department
实体@OneToMany
与employees
(部门包含员工)有联系。在这种情况下,要获取员工,您必须使用部门存储库:
employees = departmentRepo.findById(departmentId).employees
Run Code Online (Sandbox Code Playgroud)
保存同样的事情:您应该保存部门以保存员工的更改。
这些模式的任何混合(最常见:实体之间的两个 repos 和 JPA 关系)都会导致未来真正难以维护的问题。
在大多数情况下,我更喜欢 Repository 模式:每个实体的存储库,并且实体之间没有关系。
在您的情况下,我会选择存储库模式。
归档时间: |
|
查看次数: |
2380 次 |
最近记录: |