在该实体本身之前保持/保存JPA实体的关系

时间:2013-04-03 12:50:48

标签: java jpa spring-mvc

我有一个@OneToMany JPA关联,其Curriculum实例有几个WorkExperience个实例。

Curriculum JPA实体:

@Entity
public class Curriculum {
    ...
    @OneToMany
    private Set<WorkExperience> workExperiences;
    ...

WorkExperience JPA实体:

@Entity
public class WorkExperience {
...

我原本希望将课程与WorkExperiences一起保存在persist方法的一个entityManager调用中。

但是,考虑到我如何设计Web UI的操作流程,我现在想知道是否可能出现另一种情况,即:

  • 首先将WorkExperiences保存到db,然后当用户填写主要的Curriculum实体详细信息时,将其保存到:

  • 将现有的WorkExperience实例(已在db中)设置为Curriculum实例(尚未在db中)和

  • 坚持整个对象图:课程及其WorkExperiences。

这有意义吗?我想到了几个缺点,例如如果用户选择不保留Curriculum实例会发生什么?如何清理WorkExperience表中的悬空线?

是否有替代品或更好的模式?例如,在用户验证表单之前预先保存课程实例是个好主意吗?

1 个答案:

答案 0 :(得分:2)

我会在Curriculum上定义一个级联,因为WorkExperience似乎是一个依赖实体。

然后使用UI /控制器中的新/已分离实体,直到用户决定提交(最后)表单。然后保持Curriculum并且相同的WorkExperience实体也将在同一事务提交期间保持不变。

@OneToMany(cascade=CascadeType.ALL)
private Set<WorkExperience> workExperiences;