在jpa中删除双向关系的最佳方法是什么?

ui7jx7zq  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(139)

我有一个名为AssessmentCenter的类,它与我的客户类Interviewer、客户类Candidate和客户类Recruiter有多对多的关系。它还与客户类Interview有一对多的关系。它们都有双向关系(所以每个类都保存了彼此的引用对象)。为了给予你对它的外观有个概念,请查看下面AssessmentCener类中的代码段:

现在,问题是,当我试图删除一个AssessmentCenter时,我需要手动删除每个对象所持有的那些引用,否则会导致错误。例如,如果我想从数据库中删除一个AssessmentCenter的示例,那么我需要做以下操作:
1.删除List<Interviewer>-〉中的所有对象,然后对于每个删除的Interviewer对象,我需要删除Interviewer对象所持有的AssessmentCenter对象。
1.对其他3个对象重复相同的操作(对于具有一对多关系的Candidate,除了在访问结束时,其思想是相同的,它只需要删除AssessmentCenter对象一次)。
下面的代码显示了该过程:

正如您所看到的,这个过程非常乏味而且容易出错,因为每当我想要删除一个AssessmentCenter时,我都需要确保删除所有的关系。
因此,我的问题是,有没有更好的方法来做到这一点?

ni65a41a

ni65a41a1#

尝试在ManyToManyOneToMany关系中使用CascadeType.REMOVE,每当删除其父实体时,它都会删除子实体。
例如:

@ManyToMany(mappedBy = "accessmentCenters", cascade = CascadeType.REMOVE)
@JsonIgnore
private List<Interviewer> interviewers;

对于OneToMany关系,您也可以尝试设置orphanRemoval = true

@OneToMany(mappedBy = "accessmentCenter", orphanRemoval = true)
@JsonIgnore
private List<Interview> interviews;

然后,在deleteAcById方法中,您只需要调用accessmentCenterRepository.deleteById,它将为您处理子实体。
希望有帮助。

相关问题