一个账单分析任务对应多个分析结果。想实现通过task.getResult().clear()来删除Result表的数据,需要在@OneToMany里配置orphanRemoval=true和mappedBy。
@Entity
@Table(name = "BILL_ANALYSIS_TASK", schema = "RM")
public class BillAnalysisTaskEntity implements java.io.Serializable {
//...
@OneToMany(cascade = CascadeType.ALL, orphanRemoval=true, mappedBy = "userId")
private Set<BillAnalysisResultEntity> result;
}
如果只配置mappedBy而orphanRemoval=false,则执行clear()后,Result表数据不变,执行add()添加数据,可以新增数据。
如果不配置mappedBy,则会将Result表的相关记录外键置null。
之前一直对关于mappedBy的解释理解不好,什么叫放弃关系的维护权呢?为什么放弃了维护权还可以通过操作一的一方来控制多的一方。现在的理解是mappedBy放弃的是对多的一方外键的维护权,然后通过orphanRemoval属性来实现删除操作。